Henning Thielemann wrote:
 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.

Doing it that way removes the polymorphism that MonadState, MonadReader, etc offer to clients. For example, the backwards-state monad[1] is a MonadState but not a StateT (without extra plumbing). There are other examples which don't even change the semantics. It seems a shame to force these implementations to give different names for "the same" functions. Are MPTCs onerous? They'll be in haskell-prime afterall. Of course, the fundeps are another matter entirely...

[1] http://luqui.org/blog/archives/2008/08/10/mindfuck-the-reverse-state-monad/

--
Live well,
~wren
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to