ご存知の方がいらっしゃったら、教えて下さい。>>= と -> の結合順位についてです。(-> の方は結合順位じゃない気もします。)
演算子 >>= は、左結合のはずです。
m >>= f >>= g == (m >>= f) >>= g
ここで、無名関数と >>= を組み合わせた式を考えてみます。
Just 0 >>= \x -> Just 1 >>= \y -> Just (x,y) → Just (0,1)
>>= が左結合なら、以下のように括弧を付けてもいいはずですが、エラーとなります。
(Just 0 >>= \x -> Just 1) >>= \y -> Just (x,y) → エラー
試しに、右結合かのように括弧を付けると、正しく評価されます。
Just 0 >>= (\x -> Just 1 >>= \y -> Just (x,y)) Just (0,1)
考えた末に、これは、こういうことかと思いました。
Just 0 >>= \x -> (Just 1 >>= \y -> Just (x,y)) Just (0,1)
すなわち、-> を演算子と考えるなら、-> は右結合であって、>>= よりも低い結合順位を持つと。
そう考えると、最後の式で x が参照できる理由も分かります。また、
Just 0 >>= \x -> Just 1 >>= \y -> Just (x,y)
と書ける理由も分かります。
ただ、仕様書を読んでも、どこにもそうとは書いてありませんでした。どこかに、このことを裏付ける記述はないでしょうか?