- transformers: provides the classes andMonadTrans, as well as concrete monad transformers such asMonadIO. The monadStateTis only a type synonym forState s a. Thus bothStateT s Identity aandStatecan be accessed by the same methods likeStateTandput. However, this only works ifgetis the top-most transformer in a monad transformer stack. This package is Haskell 98 and thus can be also used with JHC.StateT
- mtl (Monad Transformer Library) comes in two versions:
- version 1 was the first implementation, containing the classes andMonadTrans, concrete monad transformers such asMonadIOand multi-parameter type classes with functional dependencies such asStateT. Monads likeMonadStateand their transformer counterparts likeStateare distinct types and can be accessed uniformly only through a type class abstraction likeStateT. This version is now obsolete.MonadState
- version 2 re-exports the classes and monad transformers of the transformers package, and adds multi-parameter type classes with functional dependencies such as .MonadState
- version 1 was the first implementation, containing the classes
- Because of the functional dependencies, MTL can currently (2010-03) only used in Hugs and GHC. MTL was the first implementation.
- monads-fd: this was the prototype of the new mtl implementation. It is now obsolete, and simply re-exports mtl.
- monads-tf: Provides a different abstraction using type families. Unfortunately the module names of
monads-tfclash, so you can currently not import both packages in one package.
1 How can I use MTL and transformers together?
MTL and transformers use different module names, but share common classes, type constructors and functions, so they are fully compatible.
2 Shall I use MTL or transformers?
Transformers is Haskell 98 and thus more portable.
3 How to move from MTL to transformers?
Many package using
MTL can be ported to
transformers with only slight modifications.
Modules require the
4 See also
- Monad Transformers Explained
- Monad Transformers Step by Step (PDF)
- All About Monads