Monad transformer
| The Wikibook Haskell has a page on the topic of: Monad transformers |
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).
Contents |
Definition [edit]
A monad transformer consists of:
- A type constructor
tof kind(* -> *) -> * -> * - Monad operations
returnandbind(or an equivalent formulation) for allt mwheremis a monad, satisfying the monad laws - An additional operation,
lift :: m a -> t m a, satisfying the following laws:[1] (the notation`bind`below indicates infix application):lift . return = returnlift (m `bind` k) = (lift m) `bind` (lift . k)
Examples [edit]
The option monad transformer [edit]
Given any monad
, the option monad transformer
(where
denotes the option type) is defined by:
The exception monad transformer [edit]
Given any monad
, the exception monad transformer
(where
is the type of exceptions) is defined by:
The reader monad transformer [edit]
Given any monad
, the reader monad transformer
(where
is the environment type) is defined by:
The state monad transformer [edit]
Given any monad
, the state monad transformer
(where
is the state type) is defined by:
The writer monad transformer [edit]
Given any monad
, the writer monad transformer
(where
is endowed with a monoid operation
with identity element
) is defined by:
The continuation monad transformer [edit]
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 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 [edit]
- Monads in functional programming
- Natural transformation - a related concept in category theory
References [edit]
- ^ Liang, Sheng; Hudak, Paul; Jones, Mark (1995). "Monad transformers and modular interpreters" (PDF). Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY: ACM. pp. 333–343. doi:10.1145/199448.199528. http://portal.acm.org/citation.cfm?id=199528.
External links [edit]
- [1] - a highly technical blog post briefly reviewing some of the literature on monad transformers and related concepts, with a focus on categorical-theoretic treatment
| This section requires expansion. (May 2008) |


















