module Trans:`sig`

..`end`

Monad Transformer Interface.

A monad transformer is a monad composition operator. There is not notion of a generic transformer, that takes two arbitrary monads and compose them, but every single monad should provide its own transformer. This module provides three interfaces of the transfomers:

- Monad.Trans.S composes two unary monad;
- Monad.Trans.S composes unary and binary monads;
- Monad.Trans.S composes two binary monad;

```
module M =
Outer.Make(Inner)
```

can is a new monad `M`

that has properties
of both `Outer`

and `Inner`

(you visualize this composition as
a russian doll). All transfomers provide a `lift`

function
that lifts computations in the inner monad `_ m`

to the
resultint monad `_ t`

. The `run`

function will actually run
the computation and result in a value of type `_ e`

that each
monad transfomer defines differently.module type S =`sig`

..`end`

Unary monad transformer.

module type S1 =`sig`

..`end`

Unary to binary monad transfomer.

module type S2 =`sig`

..`end`

Binary to binary monad transfomer