On 17/08/10 17:13, Tilo Wiklund wrote:
On 24/07/2010, aditya siram<aditya.si...@gmail.com>  wrote:
Perhaps I'm being unclear again. All I was trying to say was that:
liftM2 (-) [0,1] [2,3] /= liftM2 (-) [2,3] [0,1]

-deech
I'm sorry if I'm bumping an old thread, but why should "liftM2 f" be
commutative when "f" isn't?

(I hope I'm not responding incorrectly)
I think the point that was being made is that:

liftM2 (flip f) /= flip (liftM2 f)

This is because the former (well: liftM2 (flip f) a b)  effectively does:

do {x <- a; y <- b; return (f y x)}

Whereas the latter (flip (liftM2 f) a b) effectively does:

do {y <- b; x <- a; return (f y x)}

That is, the order of the arguments to liftM2 matters because they are executed in that order. So lifting the flipped function has a different effect to flipping the lifted function.

Thanks,

Neil.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to