module type Basic : sig ... endmodule type Infix : sig ... endmodule 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 S_without_syntax : sig ... endmodule type S : 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 Infix2 : sig ... endSame as Infix, except the monad type has two arguments. The second is always just passed through.
module type Syntax2 : 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 Basic3 : sig ... endMulti parameter monad. The second and third parameters get unified across all the computation.
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 Syntax3 : sig ... endmodule 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 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 Infix_indexed : sig ... endSame as Infix, except the monad type has three arguments. The second and third are compose across all computation.
module type Syntax_indexed : sig ... endmodule 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 Monad : sig ... end