我发现优先级和关联性对我来说是一个很大的障碍,让我能够理解语法在第一眼看到haskell代码时想表达什么。Haskell优先级:Lambda和运算符
例如,
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获取(>> =)作为操作符的信息,(infixl 1 >> =)。
但是没有关于 - >的信息,因为它不是运营商。
有人可以给你一些参考,使这个语法的东西更容易掌握?
的[Haskell的报告](http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-220003)是Haskell语法的权威性参考,虽然也许BNF语法对于您的问题有点低级别问...? –