Create.BThe abstract type of monad with three parameters, two phantom types and a return type.
val return : 'r -> ('p, 'q, 'r) tDefine return a to apply a to the bound function.
Define bind m f to apply the value returned by m to the function f to obtain the result monad.
Define mapping to define the `map` operator either as the default fun a -> return (f a) or as some other special map function.