Prelude Control.Monad> liftM2 (\a b -> a : b : []) "abc" "123" ["a1","a2","a3","b1","b2","b3","c1","c2","c3"] Prelude Control.Monad> Got it! Thanks to all. Michael --- On Sat, 7/24/10, aditya siram <aditya.siram@gmail.com> wrote: From: aditya siram <aditya.siram@gmail.com> Subject: Re: [Haskell-cafe] Heavy lift-ing To: "Max Rabkin" <max.rabkin@gmail.com> Cc: "haskell-cafe@haskell.org" <haskell-cafe@haskell.org>, "Lennart Augustsson" <lennart.augustsson@gmail.com> Date: Saturday, July 24, 2010, 10:35 AM 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 On Sat, Jul 24, 2010 at 9:30 AM, Max Rabkin <max.rabkin@gmail.com> wrote:
On Sat, Jul 24, 2010 at 4:08 PM, aditya siram <aditya.siram@gmail.com> wrote:
I wouldn't-it was a bad example. My only point was that because of the way (>>=) is implemented for lists the order of the arguments 'a' and 'b' in 'liftM2 f a b' matters.
-deech
No, it's not. The type of liftM2 makes this clear:
liftM2 :: (Monad m) => (a -> b -> r) -> m a -> m b -> m r
The arguments to the function *must* come in the right order, because there is no way to match (a) with (m b) or (b) with (m a). Since liftM2 is parametrically polymorphic in (a) and (b), it can't behave differently in the case where (a = b).
--Max
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe