[Haskell-cafe] Re: Transformers versus monadLib versus...

Ertugrul Soeylemez es at ertes.de
Tue Jul 6 22:01:11 EDT 2010

Edward Kmett <ekmett at gmail.com> wrote:

> You may want to review the thread here:
> http://www.haskell.org/pipermail/libraries/2009-November/012833.html
> The gist of it is, I would recommend sticking with MTL for right now,
> but confining yourself to the portions of it that transformers +
> monads-fd export (i.e. using StateT s Identity instead of State, or
> avoiding the use of the State constructors and instances on State)
> until transformers is done being refactored and monads-fd +
> transformers becomes more or less mtl compatible and the mtl shim =
> monads-fd + transformers shim is introduced in a future haskell
> platform. At that point in time you should be able to remove mtl and
> just reference monads-fd (and/or monads-tf) + transformers.  This has
> the benefit of not fragmenting the user base, letting you link against
> the large quantities of code that is built on the haskell platform
> (i.e. HTTP, etc), and provides an upgrade path to bring the code
> written for use with transformers and the code written for use with
> mtl into alignment so they can all link some day in the relatively
> near future without cabal flipping its lid.
> Of course, adding support for monadLib, which doesn't conflict with
> any of this is a completely concern.

In its highest level "not fragmenting the user base" means going back to
C++ and Windows.  So this doesn't appear like a valid argument to me.
I'll choose the package with the highest quality, not the one, which
most people use.

Fragmenting Hackage is bad.  But on the other hand I don't see why I
should stick with the inconvenient mtl.  Open source software is all
about choice, and as long as the mtl fails to provide the same
flexibility and convenience, I won't use it.  Combined with the fact
that fixing it would break existing packages, it appears like I won't go
back to the mtl ever.

MonadLib does conflict with the mtl, because it uses the same function
and type names almost everywhere with only a few minor differences.  But
that's seldomly a problem in actual applications.


nightmare = unsafePerformIO (getWrongWife >>= sex)

More information about the Haskell-Cafe mailing list