Skip to content

dragisak/monocle-cats

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.