Base.MonadA 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 ... endmodule type Basic2 = sig ... endMulti 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 ... endMulti parameter monad. The second and third parameters get unified across all the computation.
module type Basic_indexed = sig ... endIndexed 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 ... endmodule type Basic2_local = sig ... endMulti 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 ... endmodule type Infix2 = sig ... endSame as Infix, except the monad type has two arguments. The second is always just passed through.
module type Infix3 = sig ... endSame as Infix, except the monad type has three arguments. The second and third are always just passed through.
module type Infix_indexed = sig ... endSame as Infix, except the monad type has three arguments. The second and third are composed across all computation.
module type Infix_local = sig ... endmodule type Infix2_local = sig ... endSame as Infix, except the monad type has two arguments. The second is always just passed through.
module type Syntax = sig ... endOpening 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 ... endmodule type Syntax3 = sig ... endmodule type Syntax_indexed = sig ... endmodule type Syntax_local = sig ... endOpening 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 ... endmodule type S_without_syntax = sig ... endmodule type S_without_syntax_local = sig ... endmodule type S = sig ... endmodule type S2 = sig ... endThe same as S except the monad type has two arguments. The second is always just passed through.
module type S3 = sig ... endThe same as S except the monad type has three arguments. The second and third are always just passed through.
module type S_indexed = sig ... endThe same as S except the monad type has three arguments. The second and third are composed across all computation.
module type S_local = sig ... endmodule type S2_local = sig ... endThe 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.tThe 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.tmodule Make2_local
  (X : Basic2_local) : 
  S2_local with type ('a, 'e) t := ('a, 'e) X.tThe 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.