type ('a, 'b) lens = {get : 'a -> 'b;set : 'b -> 'a -> 'a;
}type ('a, 'b) prism = {preview : 'a -> 'b option;review : 'b -> 'a;
}val option : ('a option, 'a) prismval compose : ('a, 'b) lens -> ('b, 'c) lens -> ('a, 'c) lensval compose_prism : ('a, 'b) lens -> ('b, 'c) prism -> ('a, 'c) lensval fst : ('a * 'b, 'a) lensval snd : ('a * 'b, 'b) lensval hd : ('a list, 'a) prismval nth : int -> ('a list, 'a) prismval get : ('a, 'b) lens -> 'a -> 'bval set : ('a, 'b) lens -> 'b -> 'a -> 'a