运算符是否可以作为前面的函数参数而不将其括在Haskell的括号中?
这些定义不会解析:
let x f = f .
let x f = f $ .
似乎操作符成为前一个函数参数的唯一方法是括在括号中,如下所示:
let x f = f (.)
如果这是真的,我会更容易掌握这样的表达式:
e f <?> g h
答案 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)
是的,你的猜测是正确的。如果不将括号括在括号中,则不能将运算符视为参数。