Legend:

Monad transformers are widely used, but the MTL implementation is tied to functional dependencies, whose future is in doubt. Many people want to try out versions based on type functions, or without using advanced type classes at all, but their interfaces will then be incompatible with libraries using mtl.

12

Monad transformers are widely used, but the MTL interface is tied to functional dependencies, whose future is in doubt. Many people want to try out interfaces based on type functions, or without using experimental type class features, but their interfaces will then be incompatible with libraries using mtl.

13

13

14

The idea is to factor out the monad transformers as a Haskell 98 package, which can be used by itself or with type classes based on either functional dependencies or type functions. Interfaces referring to the monad transformers would be compatible across the different libraries.

14

The idea is to factor out the monad transformers as the Haskell 98 package. The objectives for this package are:

15

1. that it be as useful as possible by itself, so that it can replace many uses of mtl.

16

2. that it serve as a base for other packages adding type classes based on either functional dependencies (e.g. mtl) or type functions, with interfaces referring to the monad transformers being compatible across the different libraries.

15

17

16

The transformers and monads-fd packages have been in use for over 18 months, and are used by 112 and 23 packages respectively. The split structure has been shown to be viable, but its existence in parallel with mtl has meant extra effort for authors of client packages. It is time to complete the transition.

18

The [http://hackage.haskell.org/package/transformers transformers] and [http://hackage.haskell.org/package/monads-fd monads-fd] packages have been in use for over 18 months, and are used by 112 and 23 packages respectively. The split structure has been shown to be viable, but its existence in parallel with mtl has meant extra effort for authors of client packages. It is time to complete the transition.

The package can be used on its own (see the [http://hackage.haskell.org/packages/archive/transformers/latest/doc/html/Control-Monad-Trans-Class.html Control.Monad.Trans.Class documentation] for examples), or with packages adding type classes.

24

30

25

* mtl-2 (the current [http://hackage.haskell.org/package/monads-fd monads-fd]) depends on transformers and adds type classes using functional dependencies. Usage is very close to mtl-1, except for the differences listed below.

31

* mtl-2 (the current [http://hackage.haskell.org/package/monads-fd monads-fd]) depends on transformers and adds type classes using functional dependencies. It has the same modules as mtl-1 and usage is very close, except for the differences listed below.