Приоритет Haskell: лямбда и оператор

Я обнаружил, что приоритет и ассоциативность - это большое препятствие для меня, чтобы понять, что грамматика пытается выразить с первого взгляда в коде haskell.

Например,

blockyPlain :: Monad m => m t -> m t1 -> m (t, t1)
blockyPlain xs ys = xs >>= \x -> ys >>= \y -> return (x, y)

Экспериментом я наконец-то понял, значит,

blockyPlain xs ys = xs >>= (\x -> (ys >>= (\y -> return (x, y))))

вместо

blockyPlain xs ys = xs >>= (\x -> ys) >>= (\y -> return (x, y))

Который работает как:

*Main> blockyPlain [1,2,3] [4,5,6]
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]

Я могу получить информацию от ghci для (& gt; & gt; =) в качестве оператора (infixl 1 & gt; & gt; =).

Но нет информации для - & gt; поскольку он не является оператором.

Кто-нибудь из вас, ребята, может дать ссылку, чтобы облегчить понимание этой грамматики?

Ответы на вопрос(2)

Ваш ответ на вопрос