(add caveat about lifting operations)
(→Shall I use MTL or transformers?)
Revision as of 14:56, 16 February 2011
- 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 version 2.
- 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, and doesn't tie you to functional dependencies. But because it lacks the monad classes, you'll have to lift operations to the composite monad yourself (examples).
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