17

没有任何括号:

Prelude> [1,2] >>= \n -> ['a', 'b'] >>= \ch -> return (n, ch)
[(1,'a'),(1,'b'),(2,'a'),(2,'b')]

假设左结合性的括号:

Prelude> ([1,2] >>= \n -> ['a', 'b']) >>= \ch -> return (n, ch)
<interactive>:22:49: Not in scope: `n'

假设右结合性的括号:

Prelude> [1,2] >>= (\n -> ['a', 'b'] >>= \ch -> return (n, ch))
[(1,'a'),(1,'b'),(2,'a'),(2,'b')]

不是>>=左联想吗?当没有括号时,为什么 GHCi 评估表达式就好像>>=是右结合?

4

1 回答 1

19

是的,>>=是左联想。但是,lambda会尽可能地扩展。因此,存在\n ->意味着解析表达式的唯一正确方法是

[1,2] >>= (\n -> ['a', 'b'] >>= \ch -> return (n, ch))

请注意,您的“左关联性”表格

([1,2] >>= \n -> ['a', 'b']) >>= \ch -> return (n, ch)

甚至不是范围正确的。n决赛中的return超出范围。

于 2013-07-24T19:29:34.393 回答