Haskell 中的运算符

Operators in Haskell

我写了下面的函数

foldList :: (Double -> Double -> Double) -> [Double] -> Double
foldList op (x:t)
 | t == []     = x
 | otherwise   = (op) x (foldList op t)

而且效果非常好。但是当我将最后一行更改为

  | otherwise  = x op (foldList op t)

它不再编译了。我对 Haskell 还是比较陌生,但我认为在处理运算符时

a op b

相当于

(op) a b

我是否必须将 op 视为普通函数?如果是这样,在什么情况下它被视为运营商,为什么不在这里?

运算符是带有符号名称的函数。默认情况下它们是中缀的,您可以像使用其他函数一样使用它们,只需将它们括在括号中即可。

a + b       (+) a b

具有标识符名称的函数,例如您的 op,可以通过用 反引号 .

包装它们来用作中缀
op a b      a `op` b

另见 https://wiki.haskell.org/Infix_operator