Hi,
Thanks for creating this proposal and doing a thorough analysis of the issues, including the package breakage analysis.
* 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.
== Transition issues ==
* 41 failed with the new mtl:
* 11 because they defined their own Applicative instances (which can
now be deleted)
* 11 because of the changed constraint on Functor instances
* 15 that used the constructors of base monads (which can be trivially
replaced)
* 3 that defined instances for base monads
* 1 that defined an overlapping Error instance