2013-07-24 2 views
17

:右結合性を想定しこのhaskell式でのバインド演算子の結合性はどのように説明できますか?任意の括弧なし

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')] 

括弧

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

>>=左結合ではないですか?カッコが存在しない場合、GHCiは式を>>=が正しい結合であるかのように評価しますか?

答えて

19

はい、>>=はアソシエティブのままです。しかし、ラムダはまで可能な限りまで広がっています。だから、\n ->の存在は、式を解析するための唯一の正しい方法は、あなたの「左結合性」フォーム

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

もスコープ-正しくない

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

注ようであることを意味しています。最終returnnは範囲外です。

+3

ラムダはできるだけ伸びています。それを見ることができませんでした。ありがとう! – 0x777

関連する問題