Monad transformer

In functional programming, a monad transformer is a type constructor which takes a monad as an argument and returns a monad as a result.

Monad transformers can be used to compose features encapsulated by monads – such as state, exception handling, and I/O – in a modular way. Typically, a monad transformer is created by generalising an existing monad; applying the resulting monad transformer to the identity monad yields a monad which is equivalent to the original monad (ignoring any necessary boxing and unboxing).

Definition
A monad transformer consists of:
 A type constructor t of kind (* -> *) -> * -> *
 Monad operations return and bind (or an equivalent formulation) for all t m where m is a monad, satisfying the monad laws
 An additional operation, lift :: m a -> t m a, satisfying the following laws: (the notation `bind` below indicates infix application):
 lift . return = return
 lift (m `bind` k) = (lift m) `bind` (lift . k)

Examples

The option monad transformer
Given any monad , the option monad transformer  (where  denotes the option type) is defined by:

The exception monad transformer
Given any monad , the exception monad transformer  (where  is the type of exceptions) is defined by:

The reader monad transformer
Given any monad , the reader monad transformer  (where  is the environment type) is defined by:

The state monad transformer
Given any monad , the state monad transformer  (where  is the state type) is defined by:

The writer monad transformer
Given any monad , the writer monad transformer  (where  is endowed with a monoid operation  with identity element ) is defined by:

The continuation monad transformer
Given any monad , the continuation monad transformer maps an arbitrary type  into functions of type , where  is the result type of the continuation.  It is defined by:

Note that monad transformations are usually not commutative: for instance, applying the state transformer to the option monad yields a type  (a computation which may fail and yield no final state), whereas the converse transformation has type  (a computation which yields a final state and an optional return value).

See also
Monads in functional programming

References

External links

A highly technical blog post briefly reviewing some of the literature on monad transformers and related concepts, with a focus on categorical-theoretic treatment

Category:Functional programming