+1 Thanks for taking the time to create this proposal. The mtl vs. transformers issue has been bugging me for a while. The only other comment I have: On 16 September 2010 09:23, Ross Paterson <ross@soi.city.ac.uk> wrote:
* simple monads are now aliases for monad trasformers applied to Identity, e.g.
newtype Reader r a = Reader { runReader :: r -> a }
is replaced by
type Reader r = ReaderT r Identity
reader :: (r -> a) -> Reader r a reader f = ReaderT (Identity . f)
runReader :: Reader r a -> r -> a runReader m = runIdentity . runReaderT m
Rationale: This avoids repetition in the interfaces of both transformers and the proposed mtl-2. It makes transformers more useful on its own, and also saves clients of mtl from defining instances for both Reader r and ReaderT r and ensuring that they are consistent.
I agree with Johan that this could be an issue. Monad transformers are known to cause performance problems while I haven't heard about serious issues with the standard monads. It's probably not that hard to get some numbers for this. / Thomas