/monocle-cats

Monocle Lenses and Cats State

Primary LanguageScalaMIT LicenseMIT

Monocle Lenses and Cats State

Build Status Coverage Status Maven Central

This library brings together Monocle Lenses and Cats project.

Use

libraryDependencies += "com.dragishak" %% "monocle-cats" % "<version>"

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

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

Copyright and License

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.