Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dragisak/monocle-cats
Monocle Lenses and Cats State
https://github.com/dragisak/monocle-cats
cats monocle scala
Last synced: 3 months ago
JSON representation
Monocle Lenses and Cats State
- Host: GitHub
- URL: https://github.com/dragisak/monocle-cats
- Owner: dragisak
- License: mit
- Created: 2015-08-01T21:05:47.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2019-09-12T21:42:33.000Z (over 5 years ago)
- Last Synced: 2023-06-30T04:41:48.795Z (over 1 year ago)
- Topics: cats, monocle, scala
- Language: Scala
- Size: 39.1 KB
- Stars: 5
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Monocle Lenses and Cats State
[![Build Status](https://travis-ci.org/dragisak/monocle-cats.svg)](https://travis-ci.org/dragisak/monocle-cats)
[![Coverage Status](https://coveralls.io/repos/dragisak/monocle-cats/badge.svg?branch=master&service=github)](https://coveralls.io/github/dragisak/monocle-cats?branch=master)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.dragishak/monocle-cats_2.13/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.dragishak/monocle-cats_2.13)This library brings together [Monocle Lenses](http://julien-truffaut.github.io/Monocle/) and [Cats](https://typelevel.org/cats/) project.
## Use
```scala
libraryDependencies += "com.dragishak" %% "monocle-cats" % ""
```## Version support matrix
Monocle | Cats | Scala | monocle-cats
----------|-----------|------------------|-----------------
1.2.2 | 0.7.2 | 2.10, 2.11 | 1.0
1.3.2 | 0.8.1 | 2.10, 2.11, 2.12 | 1.1
1.4.0 | 0.9.0 | 2.10, 2.11, 2.12 | 1.2
2.0.0 | 2.0.0 | 2.12, 2.13 | 1.3## Example
```scala
import cats.monocle.syntax._
import cats.instances.all._
import monocle.macros.Lenses@Lenses case class Address(street: String, city: String, zip: Int)
@Lenses case class Person(name: String, age:Int, address: Address)val setStreet = Address.street := "13 Main St."
val incrementAge = Person.age += 1val state = for {
newStreetName <- Person.address %%= setStreet
newAge <- incrementAge
} yield (newStreetName, newAge)val person = Person("Alice", 30, Address("1 Main St", "San Francisco", 94123))
val (changedPerson, (newStreet, newAge)) = state.run(person).value
```
## Copyright and License
All code is available to you under the MIT license, available at [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) and also
in the LICENSE file.Copyright Dragisa Krsmanovic, 2019.