S.M
type +'a t
val return : 'a -> 'a M.t
val (>>=) : 'a M.t -> ('a -> 'b M.t) -> 'b M.t
val (>|=) : 'a M.t -> ('a -> 'b) -> 'b M.t