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

はい、>>=連想のままです。ただし、ラムダは可能な限り拡張されます。したがって、の存在は\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 に答える