Monadise
Make any direct-style function monadic without effort, but with effects!
module type Monad = sig ... end
module type S = sig ... end
module Make (M : Monad) : S with type 'a m = 'a M.t
module Option : sig ... end