[Haskell-cafe] List Monads and non-determinism

Rogan Creswick creswick at gmail.com
Sat Jul 20 00:35:27 CEST 2013


On Fri, Jul 19, 2013 at 3:23 PM, Matt Ford <matt at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130719/7f728b70/attachment.htm>


More information about the Haskell-Cafe mailing list