[Haskell-cafe] Let's do ListT right, finally
dave at zednenem.com
Sun Oct 14 16:50:42 EDT 2007
On 10/14/07, Dan Piponi <dpiponi at gmail.com> wrote:
> On 10/14/07, Yitzchak Gale <gale at sefer.org> wrote:
> > Not very much, I suspect. That "monad" really is broken -
> > it's not a monad at all.
> Depending on your point of view, ListT isn't broken. It correctly
> transforms commutative monads into monads. The problem is that you
> can't express "commutative monad" any differently from "monad" in
> Haskell. And so it's been shoehorned into the wrong type class.
If desired, we could easily define a class for commutative monads, and
then state that ListT m is only a monad if m is a commutative monad.
class Monad m => CommutativeMonad m
instance (CommutativeMonad m) => Monad (ListT m) where
return a = ListT (return [a])
Naturally, it's up to the programmer to guarantee that instances of
CommutativeMonad are actually commutative monads.
Dave Menendez <dave at zednenem.com>
More information about the Libraries