module type Basic = Monad_intf.Basic
type 'a
t
val bind : 'a t ->
('a -> 'b t) -> 'b t
val return : 'a -> 'a t
return x >>= f = f x
t >>= fun x -> return x = t
(t >>= f) >>= g = t >>= fun x -> (f x >>= g)
>>=
is the infix notation for bind
)val map : [ `Custom of 'a t -> f:('a -> 'b) -> 'b t
| `Define_using_bind ]
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.