Files
fieldglass/fieldglass.ml
T

12 lines
430 B
OCaml

type ('s, 't, 'a, 'b) lens = ('s -> 'a) * ('b -> 's -> 't)
type ('s, 'a) lens' = ('s, 's, 'a, 'a) lens
let lens ~view ~set = view, set
let view (get, _) = get
let set (_, put) = put
let over (get, put) ~f source = put (f (get source)) source
let compose (outer_get, outer_put) (inner_get, inner_put) =
(fun source -> inner_get (outer_get source)),
(fun value source -> outer_put (inner_put value (outer_get source)) source)