This library brings together Monocle Lenses and Cats project.
libraryDependencies += "com.dragishak" %% "monocle-cats" % "<version>"
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 |
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 += 1
val 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
All code is available to you under the MIT license, available at http://opensource.org/licenses/MIT and also in the LICENSE file.
Copyright Dragisa Krsmanovic, 2019.