Nice explanation.  However, at
http://stackoverflow.com/questions/4119730/cartesian-product it was pointed
out that this

cartProd :: [a] -> [b] -> [(a, b)]
cartProd = liftM2 (,) 

is equivalent to the cartesian product produced using a list comprehension:

cartProd xs ys = [(x,y) | x <- xs, y <- ys]

I do not see how your method of explanation can be used to explain this
equivalence?  Nevertheless, can you help me to understand how liftM2 (,)
achieves the cartesian product?  For example,

Prelude Control.Monad.Reader> liftM2 (,) [1,2] [3,4,5]
[(1,3),(1,4),(1,5),(2,3),(2,4),(2,5)]

Thank you!

--
View this message in context: 
http://haskell.1045720.n5.nabble.com/Cannot-understand-liftM2-tp3085649p5470185.html
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

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

Reply via email to