
+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
* 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