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 <cresw...@gmail.com> wrote: > On Fri, Jul 19, 2013 at 3:23 PM, Matt Ford <m...@dancingfrog.co.uk> 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 >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe