`module type Mappable = sig ... end`

A signature for data structures which have a `map : ('a -> 'b) -> ('a t -> 'b t)` operation.

`module type OrderedType = sig ... end`

Monads are a design pattern which may be used to enforce strong functional or non-functional constraints on the manipulation of resources, while remaining in the world of functional programming. For instance, monads may serve to implement approximations of a types-and-effects type system, to enforce functional use of arrays or other mutable data structures, or to enforce the fact that only files opened for writing may be actually used for writing.

For more information on monads, see A Monad Tutorial for Ocaml.

This definition is compatible with the standard syntax extension for monads. For more information, see the documentation of pa_monad.

- author David Teller

`module type Monad = sig ... end`

Signature for monads