Monad transformer
Appearance
The Wikibook Haskell has a page on the topic of: Monad_transformers
In functional programming, a monad transformer is essentially a type constructor which takes a monad as an argument, and returns a monad.
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
andbind
(or an equivalent formulation) for allt m
wherem
is 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 = return
lift (m `bind` k) = (lift m) `bind` (lift k)
Examples
![]() | This section needs expansion. You can help by adding to it. |
References
- ^
Liang, Sheng (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.
{{cite conference}}
: Unknown parameter|booktitle=
ignored (|book-title=
suggested) (help); Unknown parameter|coauthors=
ignored (|author=
suggested) (help)
External links
- [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 needs expansion. You can help by adding to it. |