
Hi,
Thanks for the help.
I thought >>= was left associative? It seems to be in the examples from Learn You A Haskell.
I tried to use the associative law to bracket from the right but it didn't like that either...
[1,2] >>= (\x -> (\n -> [3,4])) x >>= \m -> return (n,m))
Any thoughts?
Matt
On 19 Jul 2013, at 23:35, Rogan Creswick
On Fri, Jul 19, 2013 at 3:23 PM, Matt Ford
wrote: I started by putting brackets in
([1,2] >>= \n -> [3,4]) >>= \m -> return (n,m)
This immediately fails when evaluated: I expect it's something to do with the n value now not being seen by the final return.
You're bracketing from the wrong end, which your intuition about n's visibility hints at. Try this as your first set of parens:
[1,2] >>= (\n -> [3,4] >>= \m -> return (n,m))
--Rogan
It seems to me that the return function is doing something more than it's definition (return x = [x]).
If ignore the error introduced by the brackets I have and continue to simplify I get.
[3,4,3,4] >>= \m -> return (n,m)
Now this obviously won't work as there is no 'n' value. So what's happening here? Return seems to be doing way more work than lifting the result to a list, how does Haskell know to do this? Why's it not in the function definition? Are lists somehow a special case?
Any pointers appreciated.
Cheers,
-- Matt
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe