Optic
type ('a, 'b) iso = {
ltor : 'a -> 'b;
rtol : 'b -> 'a;
}
type ('a, 'b) lens = {
get : 'a -> 'b;
put : 'b -> 'a -> 'a;
type ('a, 'b) prism = {
extract : 'a -> 'b option;
make : 'b -> 'a;
module Iso : sig ... end
module Lens : sig ... end
module Prism : sig ... end