Haskell的运营商

P-A*_*P-A 1 haskell operators

我写了以下函数

foldList :: (Double -> Double -> Double) -> [Double] -> Double
foldList op (x:t)
 | t == []     = x
 | otherwise   = (op) x (foldList op t)
Run Code Online (Sandbox Code Playgroud)

它工作得非常好.但当我改变最后一行时

  | otherwise  = x op (foldList op t)
Run Code Online (Sandbox Code Playgroud)

它不再编译了.我仍然是Haskell的新手,但我想与操作员打交道

a op b
Run Code Online (Sandbox Code Playgroud)

相当于

(op) a b
Run Code Online (Sandbox Code Playgroud)

我是否必须将其op视为正常功能?如果是这样,在什么情况下它被视为运营商,为什么不在这里呢?

Ry-*_*Ry- 6

运算符是具有符号名称的函数.默认情况下,它们是中缀,您可以将它们包含在括号中,就像其他函数一样使用它们.

a + b       (+) a b
Run Code Online (Sandbox Code Playgroud)

具有标识符名称的函数(如您的op)可以通过用反引号包装它们作为中缀.

op a b      a `op` b
Run Code Online (Sandbox Code Playgroud)

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