
On Wed, Mar 07, 2007 at 11:59:24PM +0000, Ross Paterson wrote:
I propose that we restructure and split the mtl into two packages:
mtl-base: a Haskell-98 package containing the monad transformers and non-overloaded versions of the operations, [...]
mtl (depending on mtl-base): multi-parameter+FD type classes with instances for the transformers in mtl-base, [...]
One benefit is that it would be possible to use monad transformers in portable programs, at the cost of a little explicit lifting of operations. Often when I use a stack of monad transformers, I define aliases for the new monad and its operations, so this wouldn't be much extra effort.
A second benefit is that one could introduce other packages with other interfaces, e.g. one using associated types.
The revised mtl would be almost compatible with the existing one, except 1) The monad transformer and corresponding monad would have the same strictness (this has already been done in the HEAD). 2) It wouldn't be possible to declare instances for the corresponding monad.
I have had a go at this re-organization: src: darcs get http://darcs.haskell.org/packages/mtl-split docs: http://www.soi.city.ac.uk/~ross/mtl-split/ The plan is to split Control.Monad.Identity, Control.Monad.Trans and Control.Monad.Trans.* off into a separate (portable) package.