Module type Monad_intf.Monad.Basic

module type Basic = Monad_intf.Basic

type 'a t 
val bind : 'a t ->
('a -> 'b t) -> 'b t
val return : 'a -> 'a t
The following identities ought to hold (for some value of =):

Note: >>= is the infix notation for bind)
val map : [ `Custom of 'a t -> f:('a -> 'b) -> 'b t
| `Define_using_bind ]
The map argument to Monad.Make says how to implement the monad's map function. `Define_using_bind means to define map t ~f = bind t (fun a -> return (f a)). `Custom overrides the default implementation, presumably with something more efficient.

Some other functions returned by Monad.Make are defined in terms of map, so passing in a more efficient map will improve their efficiency as well.