Monad classes, using functional dependencies

Version on this page:2.2.1@rev:1
LTS Haskell 19.8:2.2.2
Stackage Nightly 2022-05-25:2.2.2
Latest on Hackage:2.3

See all snapshots mtl appears in

BSD-3-Clause licensed by Andy Gill
Maintained by Edward Kmett
This version can be pinned in stack with:mtl-2.2.1@sha256:4b5a800fe9edf168fc7ae48c7a3fc2aab6b418ac15be2f1dad43c0f48a494a3b,1749

Module documentation for 2.2.1

  • Control
    • Control.Monad
      • Control.Monad.Cont
        • Control.Monad.Cont.Class
      • Control.Monad.Error
        • Control.Monad.Error.Class
      • Control.Monad.Except
      • Control.Monad.Identity
      • Control.Monad.List
      • Control.Monad.RWS
        • Control.Monad.RWS.Class
        • Control.Monad.RWS.Lazy
        • Control.Monad.RWS.Strict
      • Control.Monad.Reader
        • Control.Monad.Reader.Class
      • Control.Monad.State
        • Control.Monad.State.Class
        • Control.Monad.State.Lazy
        • Control.Monad.State.Strict
      • Control.Monad.Trans
      • Control.Monad.Writer
        • Control.Monad.Writer.Class
        • Control.Monad.Writer.Lazy
        • Control.Monad.Writer.Strict

Monad classes using functional dependencies, with instances for various monad transformers, inspired by the paper Functional Programming with Overloading and Higher-Order Polymorphism, by Mark P Jones, in Advanced School of Functional Programming, 1995 (



  • Provide MINIMAL pragmas for MonadState, MonadWriter, MonadReader
  • Added a cyclic definition of ask in terms of reader for consistency with get/put vs. state and tell vs. writer
  • Fix deprecation warnings caused by transformers 0.4 deprecating ErrorT.
  • Added Control.Monad.Except in the style of the other mtl re-export modules

  • Fixed a bug caused by the change in how transformers 0.4 exports its data types. We will now export runFooT for each transformer again!


  • transformers 0.4 support
  • Added instances for ExceptT
  • Added modify' to Control.Monad.State.*

  • Avoid importing Control.Monad.Instances on GHC 7.8 to build without deprecation warnings.


  • Removed the now-irrelevant Error constraint from the MonadError instance for Either e.