Module Optic.Lens

type ('a, 'b) t = ( 'a, 'b ) lens = {
get : 'a -> 'b;
put : 'b -> 'a -> 'a;
}
val get : ( 'a, 'b ) lens -> 'a -> 'b
val put : ( 'a, 'b ) lens -> 'b -> 'a -> 'a
val map : ( 'a, 'b ) lens -> ( 'b -> 'b ) -> 'a -> 'a
val compose : ( 'a, 'b ) lens -> ( 'b, 'c ) lens -> ( 'a, 'c ) lens
val (@@) : ( 'a, 'b ) lens -> ( 'b, 'c ) lens -> ( 'a, 'c ) lens
val product : ( 'a, 'b ) lens -> ( 'c, 'd ) lens -> ( 'a * 'c, 'b * 'd ) lens
val (<*>) : ( 'a, 'b ) lens -> ( 'c, 'd ) lens -> ( 'a * 'c, 'b * 'd ) lens
val id : ( 'a, 'a ) lens
val fst : ( 'a * 'b, 'a ) lens
val snd : ( 'a * 'b, 'b ) lens