Base.Monad
A monad is an abstraction of the concept of sequencing of computations. A value of type 'a monad
represents a computation that returns a value of type 'a
.
module type Basic = sig ... end
module type Basic2 = sig ... end
Multi parameter monad. The second parameter gets unified across all the computation. This is used to encode monads working on a multi parameter data structure like (('a,'b) result
).
module type Basic3 = sig ... end
Multi parameter monad. The second and third parameters get unified across all the computation.
module type Basic_indexed = sig ... end
Indexed monad, in the style of Atkey. The second and third parameters are composed across all computation. To see this more clearly, you can look at the type of bind:
module type Basic_local = sig ... end
module type Basic2_local = sig ... end
Multi parameter monad. The second parameter gets unified across all the computation. This is used to encode monads working on a multi parameter data structure like (('a,'b) result
).
module type Infix = sig ... end
module type Infix2 = sig ... end
Same as Infix
, except the monad type has two arguments. The second is always just passed through.
module type Infix3 = sig ... end
Same as Infix, except the monad type has three arguments. The second and third are always just passed through.
module type Infix_indexed = sig ... end
Same as Infix
, except the monad type has three arguments. The second and third are composed across all computation.
module type Infix_local = sig ... end
module type Infix2_local = sig ... end
Same as Infix
, except the monad type has two arguments. The second is always just passed through.
module type Syntax = sig ... end
Opening a module of this type allows one to use the %bind
and %map
syntax extensions defined by ppx_let, and brings return
into scope.
module type Syntax2 = sig ... end
module type Syntax3 = sig ... end
module type Syntax_indexed = sig ... end
module type Syntax_local = sig ... end
Opening a module of this type allows one to use the %bind
and %map
syntax extensions defined by ppx_let, and brings return
into scope.
module type Syntax2_local = sig ... end
module type S_without_syntax = sig ... end
module type S_without_syntax_local = sig ... end
module type S = sig ... end
module type S2 = sig ... end
The same as S
except the monad type has two arguments. The second is always just passed through.
module type S3 = sig ... end
The same as S
except the monad type has three arguments. The second and third are always just passed through.
module type S_indexed = sig ... end
The same as S
except the monad type has three arguments. The second and third are composed across all computation.
module type S_local = sig ... end
module type S2_local = sig ... end
The same as S
except the monad type has two arguments. The second is always just passed through.
The same as S
except the monad type has two arguments. The second is always just passed through.
The same as S
except the monad type has three arguments. The second and third are always just passed through.
module Make_indexed
(X : Basic_indexed) :
S_indexed with type ('a, 'd, 'e) t := ('a, 'd, 'e) X.t
The same as S
except the monad type has three arguments. The second and third are composed across all computation.
module Make_local (X : Basic_local) : S_local with type 'a t := 'a X.t
module Make2_local
(X : Basic2_local) :
S2_local with type ('a, 'e) t := ('a, 'e) X.t
The same as S
except the monad type has two arguments. The second is always just passed through.
Define a monad through an isomorphism with an existing monad. For example:
The same as S
except the monad type has two arguments. The second is always just passed through.
The same as S
except the monad type has three arguments. The second and third are always just passed through.