Haskell中的中缀运算符优先级

aha*_*ala 2 haskell

对于以下Haskell表达式

返回>> = f

它应该被理解为

(返回a)>> = f

要么

返回(a >> = f)?

这里的相关规则是什么?

bhe*_*ilr 12

规则始终是函数应用程序具有比任何运算符更高的优先级,因此

return a >>= f
Run Code Online (Sandbox Code Playgroud)

被解析为

(return a) >>= f
Run Code Online (Sandbox Code Playgroud)

无论正在使用的,而不是什么功能或运营商return,f以及>>=.


这意味着像

divide :: Int -> Int -> Double
divide x y = (fromIntegral x) / (fromIntegral y)
Run Code Online (Sandbox Code Playgroud)

相当于

divide :: Int -> Int -> Double
divide x y = fromIntegral x / fromIntegral y
Run Code Online (Sandbox Code Playgroud)

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

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

正如你在这里看到的,我们甚至zipWith将两个参数与其他几个函数组合在一起.这相当于在组合的每个组件周围加上括号.