list monad transformer
Graham Klyne
GK@ninebynine.org
Thu, 15 May 2003 20:51:22 +0100
I think this is also covered in "Monad Transformers and Modular
Interpreters" [1] (section 7.5), in which the special nature of list monads
and their relation to "commutative monads" is called out. I can't pretend
to fully understand all that's going on here, but their comments seem to
mirror yours.
#g
--
[1] http://citeseer.nj.nec.com/liang95monad.html
At 11:12 15/05/03 -0700, Iavor Diatchki wrote:
>hello,
>
>in his thesis [1], sheng liang mentions that we cannot define
>a list monad transformer. for some time now i was wondering why is that
>but never had the time to look into it, until the other day.
>what basically breaks is the associativity law, as the one form
>(#lhs# bellow) traverses the "choice tree" in a breadth first search
>manner, while the other (#rhs# bellow) does it in a depth first search
>manner. when the underlying monad is not commutative (i.e. the order of
>effects in it matters) we run into a probelm. here is an example:
>
> > import Control.Monad.List
> >
> > pr x = lift (putStr $ show x ++ " ")
> >
> > test :: (ListT IO (), ListT IO ())
> > test = (m >>= f >>= g, m >>= \x -> f x >>= g)
> > where m = do pr "m: "; pr 1 `mplus` pr 2
> > f _ = do pr "f: "; pr 3 `mplus` pr 4
> > g _ = do pr "g: "; pr 5 `mplus` pr 6
> >
> > main = do let (lhs,rhs) = test
> > runListT lhs
> > putStrLn ""
> > runListT rhs
>
>the transformer will work for commutative monads (intuition is above,
>formal proof is in [2]). given that, we should either remove the #ListT#
>transformer from the monad library, or (perhaps better) put a big warning
>that it should only be used with commutative monads.
>a rule of thumb for determining the commutativity of a monad is (using
>terminology from the library):
>the #Identity# monad is commutative
>the #ReaderT# transformer preserves commutativity
>the #ErrorT# transformer preserves commutativity
>the #WriterT# transformer preserves commutativity if its monoid (for
>collecitng output) is commutative
>
>bye
>iavor
>
>
>References
>==========
>
>[1] Modular Monadic Semantics and Compilation. Sheng Liang. Ph.D. Thesis,
>Yale University, 1997.
>[2] Composing Monads. Mark P. Jones and Luc Duponcheel, Research Report
>YALEU/DCS/RR-1004, Yale University, New Haven, Connecticut, USA, December 1993.
>
>_______________________________________________
>Haskell mailing list
>Haskell@haskell.org
>http://www.haskell.org/mailman/listinfo/haskell
-------------------
Graham Klyne
<GK@NineByNine.org>
PGP: 0FAA 69FF C083 000B A2E9 A131 01B9 1C7A DBCA CB5E