module type Monad =sig..end
Signature for monads
type 'a m
The type of a monad producing values of type 'a.
val bind : 'a m ->
('a -> 'b m) -> 'b mMonadic binding.
bind m f executes first m then f, using the
result of m.
val return : 'a -> 'a mReturn a value, that is, put a value in the monad.