
Some packages that I use import mtl, but latest mtl requires transformers-0.2. It seems that simply the constraint must be relaxed. Btw. can the maintainers of mtl and transformers please specify the repositories for these packages in the Cabal description?

I have a more or less release ready copy of mtl 2.1 up on http://github.com/ekmett/mtl that uses the current transformers, but I had been waiting for some feedback before pushing it out to hackage. It does include maintainer information and the repository link. -Edward On Sat, Apr 7, 2012 at 2:35 PM, Henning Thielemann < lemming@henning-thielemann.de> wrote:
Some packages that I use import mtl, but latest mtl requires transformers-0.2. It seems that simply the constraint must be relaxed.
Btw. can the maintainers of mtl and transformers please specify the repositories for these packages in the Cabal description?
______________________________**_________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/**mailman/listinfo/librarieshttp://www.haskell.org/mailman/listinfo/libraries

Could you remind us what the difference between mtl and monads-fd is these
days? Is that described anywhere?
* Edward Kmett
I have a more or less release ready copy of mtl 2.1 up on
that uses the current transformers, but I had been waiting for some feedback before pushing it out to hackage.
It does include maintainer information and the repository link.
-Edward
On Sat, Apr 7, 2012 at 2:35 PM, Henning Thielemann < lemming@henning-thielemann.de> wrote:
Some packages that I use import mtl, but latest mtl requires transformers-0.2. It seems that simply the constraint must be relaxed.
Btw. can the maintainers of mtl and transformers please specify the repositories for these packages in the Cabal description?
-- Roman I. Cheplyaka :: http://ro-che.info/

On Sun, Apr 8, 2012 at 3:46 AM, Roman Cheplyaka
Could you remind us what the difference between mtl and monads-fd is these days? Is that described anywhere?
In the beginning there was the MTL, and it was good. Eventually the fact that the MTL requires multiparameter type classes, flexible instances, and most gallingly, undecidable instances and yet was part of the Haskell platform started to bother some people. Other niggling problems with the MTL were starting to bother folks, so other MTL-like packages mmtl, monadLib, etc. started to form at this time. So Ross, who was maintaining the MTL at the time, wrote 'transformers', which provided a Haskell 98 core, and set about writing monads-fd and monads-tf fixing up some problems with the MTL as he went, and reducing code duplication (by making State s into just StateT s Identity rather than a separate type, for instance.) The general idea seemed to be that we could get the entire community to move over in one fell swoop to something much nicer and more maintainable that still felt mostly the same. With both monads-tf and monads-fd, I suppose the thought was that folks could use whichever version appealed to them the most. The problem was that -- in hindsight -- this choice was kind of an awkward idea, because monads-fd and monads-tf both use exactly the same module names! So when you write a library you are forced to choose one or the other and could not gracefully decide to supply both without turning to horrible package imports or making multiple packages crammed full of orphan instances, fragmenting the monad transformer library user base 3 ways, since not only did they conflict with each other, but they also conflicted with the original mtl, which by sheer inertia wasn't going anywhere any time soon. But, nobody wanted to maintain the stinking carcass that was the old MTL by this point. The core Haskell 98 transformers package was a pretty nice improvement though, and it was clear that the monads-fd approach was a nicer overall design and where all the improvements were being investigated. To deal with this fragmentation, ultimately, it was decided somewhere around the end of 2010 to rename monads-fd to mtl 2.0, and keep it built on transformers. So effectively, the MTL _is_ what became of monads-fd. Note: http://hackage.haskell.org/package/monads-fd redirects you to mtl. In the meantime, monads-tf was pretty much abandoned. It may have been perfectly reasonable to maintain separately, but it IS a lot of boilerplate to force on everyone who wants decent library support, and it really would need to be have a separate set of module names to able to coexist with the MTL in usable fashion. *TL;DR* monads-fd became mtl 2.0 back in 2010. -Edward

Since the overwhelming response from folks was 'push it!' i've uploaded mtl
2.1
-Edward
On Sun, Apr 8, 2012 at 4:29 AM, Edward Kmett
On Sun, Apr 8, 2012 at 3:46 AM, Roman Cheplyaka
wrote: Could you remind us what the difference between mtl and monads-fd is these
days? Is that described anywhere?
In the beginning there was the MTL, and it was good.
Eventually the fact that the MTL requires multiparameter type classes, flexible instances, and most gallingly, undecidable instances and yet was part of the Haskell platform started to bother some people.
Other niggling problems with the MTL were starting to bother folks, so other MTL-like packages mmtl, monadLib, etc. started to form at this time.
So Ross, who was maintaining the MTL at the time, wrote 'transformers', which provided a Haskell 98 core, and set about writing monads-fd and monads-tf fixing up some problems with the MTL as he went, and reducing code duplication (by making State s into just StateT s Identity rather than a separate type, for instance.)
The general idea seemed to be that we could get the entire community to move over in one fell swoop to something much nicer and more maintainable that still felt mostly the same.
With both monads-tf and monads-fd, I suppose the thought was that folks could use whichever version appealed to them the most.
The problem was that -- in hindsight -- this choice was kind of an awkward idea, because monads-fd and monads-tf both use exactly the same module names! So when you write a library you are forced to choose one or the other and could not gracefully decide to supply both without turning to horrible package imports or making multiple packages crammed full of orphan instances, fragmenting the monad transformer library user base 3 ways, since not only did they conflict with each other, but they also conflicted with the original mtl, which by sheer inertia wasn't going anywhere any time soon.
But, nobody wanted to maintain the stinking carcass that was the old MTL by this point. The core Haskell 98 transformers package was a pretty nice improvement though, and it was clear that the monads-fd approach was a nicer overall design and where all the improvements were being investigated.
To deal with this fragmentation, ultimately, it was decided somewhere around the end of 2010 to rename monads-fd to mtl 2.0, and keep it built on transformers. So effectively, the MTL _is_ what became of monads-fd.
Note: http://hackage.haskell.org/package/monads-fd redirects you to mtl.
In the meantime, monads-tf was pretty much abandoned. It may have been perfectly reasonable to maintain separately, but it IS a lot of boilerplate to force on everyone who wants decent library support, and it really would need to be have a separate set of module names to able to coexist with the MTL in usable fashion.
*TL;DR* monads-fd became mtl 2.0 back in 2010.
-Edward
participants (3)
-
Edward Kmett
-
Henning Thielemann
-
Roman Cheplyaka