On 10/14/07, Dan Piponi <[EMAIL PROTECTED]> wrote: > On 10/14/07, Yitzchak Gale <[EMAIL PROTECTED]> 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. For example, class Monad m => CommutativeMonad m instance (CommutativeMonad m) => Monad (ListT m) where return a = ListT (return [a]) etc. Naturally, it's up to the programmer to guarantee that instances of CommutativeMonad are actually commutative monads. -- Dave Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe