Preface_specs.Monad
A Monad
allow to sequences operations that are dependent from one to another, in contrast to Applicative
, which executes a series of independent actions.
To have a predictable behaviour, the instance of Monad
must obey some laws.
return a >>= f = f a
m >>= return = m
(m >>= f) >>= g = m >>= (fun x +> f x >>= g)
join % join = join % (map join)
join % return = id = join % map pure
map id = id
map (g % f) = map g % map f
map f % join = join % map (map f)
map f % pure = pure % f
return >=> g = g
f >=> return = f
(f >=> g) >=> h = f >=> (g >=> h)
module type WITH_RETURN = sig ... end
Minimal interface using map
and product
.
module type WITH_RETURN_AND_BIND = sig ... end
Minimal definition using return
and bind
.
module type WITH_RETURN_MAP_AND_JOIN = sig ... end
Minimal definition using return
, map
and join
.
module type WITH_RETURN_AND_KLEISLI_COMPOSITION = sig ... end
Minimal definition using return
and compose_left_to_right
.
module type CORE = sig ... end
Basis operations.
module type OPERATION = sig ... end
Additional operations.
module type SYNTAX = sig ... end
Syntax extensions.
module type INFIX = sig ... end
Infix operators.
module type API = sig ... end
The complete interface of a Monad
.
A standard representation of a monad transformer. (It is likely that not all transformers respect this interface)
module type TRANSFORMER = sig ... end