
Ryan Ingram schrieb:
On Mon, Oct 13, 2008 at 2:04 AM, J. Garrett Morris
wrote: Indeed - MTL seems to have been rewritten at some point in the past to prefer exhaustive enumeration to overlap.
Indeed, and I actually think this is a weakness of the current implementation. Anyone who comes up with a new transformer that provides different functionality than what is there needs to explicitly provide all the relevant instances, instead of letting MonadTrans do its thing.
I long thought that it is unnecessary use of type system extensions to require multi-parameter type classes for simple monads and its transformer versions. I thought it would be enough to have atomar monads like ST, IO and Identity, and monads like State, Reader, Writer, Continuation can be offered exclusively in the transforming variant. (State s a) would have to be defined as (StateT s Identity a) instead. This way MonadState, MonadReader and the other classes become unnecessary. However, 'lift' remains important with this design.