Haskell中的中缀运算符优先级

时间:2014-03-25 19:03:45

标签: haskell

对于以下Haskell表达式

  

返回>> = f

是否应该被理解为

  

(返回a)>> = f

  

返回(a>> = f)?

这里的相关规则是什么?

1 个答案:

答案 0 :(得分:12)

规则总是函数应用程序的优先级高于任何运算符,所以

return a >>= f

被解析为

(return a) >>= f

无论使用哪种功能或运算符代替returnf>>=


这意味着像

divide :: Int -> Int -> Double
divide x y = (fromIntegral x) / (fromIntegral y)

等同于

divide :: Int -> Int -> Double
divide x y = fromIntegral x / fromIntegral y

另一个更有用的例子是功能组合:

something :: [Int] -> [Int]
something xs = filter even . map (+1) . zipWith (*) [1..] . take 200 . cycle $ xs

正如你在这里看到的,我们甚至让zipWith采用由其他几个函数组成的两个参数。这相当于在组合的每个组成部分周围加上括号。