Haskell函数应用程序语法,运算符作为参数

时间:2013-11-30 15:03:35

标签: haskell

运算符是否可以作为前面的函数参数而不将其括在Haskell的括号中?

这些定义不会解析:

let x f = f .
let x f = f $ .

似乎操作符成为前一个函数参数的唯一方法是括在括号中,如下所示:

   let x f = f (.)

如果这是真的,我会更容易掌握这样的表达式:

 e f <?> g h

2 个答案:

答案 0 :(得分:3)

正如@RobinGreen指出的那样,你必须在括号中包含一个运算符以将其用作参数。之所以如此,是因为将它包装在括号中会使编译器将其视为前缀函数而不是 infix 函数。所以以下两个是等价的:

1 + 2
(+) 1 2
(1 +) 2   -- Partially applied operator is still an operator
          -- Note: this is not the same as (+ 1) 2 in general
          -- because argument order matters.  It would be
          -- silly to say that (f .) g is the same as (. f) g

基本上,括号使中缀运算符成为普通前缀函数,可以像任何其他函数一样传递。

答案 1 :(得分:1)

是的,你的猜测是正确的。如果不将括号括在括号中,则不能将运算符视为参数。