Jeff,

Thank you for your reply.

>> After fn is lifted, where is "bind" used in allCombinations?
>The bind happens inside the liftM2 function, which can be defined as 
>(taken from http://www.haskell.org/onlinereport/monad.html):
>liftM2 f =  \a b -> do { a' <- a; b' <- b; return (f a' b') }

Using the above, I think that allCombinations can be rewritten:
 allCombinations fn (l:ls) = 
  foldl (\a b -> do { a' <- a; b' <- b; return (fn a' b') }) l ls

I'm not sure how "allCombinations (+) [[1,2][2,3]]" gets to the final
result, since the above would seem to yield:
 allCombinations (+) [1,2]:[[2,3]] = 
  foldl (\a b -> do { a' <- a; b' <- b; return (fn a' b') }) [1,2] [[2,3]]
 allCombinations (+) [1,2]:[[2,3]] = 
  return ((+) [1,2] [2,3])

You mentioned on your site that the operation of the List monad is key to
comprehending this function, but I still wasn't able to grok it.  Any
pointers would be appreciated.

        - Alson

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

Reply via email to