dragisak / monocle-cats

Monocle Lenses and Cats State

Github

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>"

Versions

Monocle Cats monocle-cats
1.2.2 0.7.2 1.0
1.3.2 0.8.1 1.1
1.4.0 0.9.0 1.2

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, 2016.