* derived from)
*)
-exception Undefined
(* Some library functions used below. *)
+
+exception Undefined
+
module Util = struct
let fold_right = List.fold_right
let map = List.map
let undef = Obj.magic (fun () -> raise Undefined)
end
-
-
(*
* This module contains factories that extend a base set of
* monadic definitions with a larger family of standard derived values.
*)
module Monad = struct
+
(*
* Signature extenders:
* Make :: BASE -> S
let distribute f t = mapT (fun a -> elevate (f a)) t zero plus
let expose u = u
end
+
end;;