我可以通过将运算符括在括号中将其转换为函数,如下所示:
Prelude> (+) 3 4 7
同样地,我可以通过将两个参数的函数用反勾号括起来,使其成为运算符:
Prelude> 3 `max` 4 4
为什么我不能两个都做?
Prelude> (`max`) 3 4 <interactive>:3:7: error: parse error on input â)â Prelude> 3 `(+)` 4 <interactive>:4:4: error: parse error on input â(â
第一种情况尤其令人震惊,因为以下情况确实有效:
Prelude> (`max` 3) 4 4
每次你写信 (`max`) ,你也可以写 max . 每次你写信 `(+)` + . 使运算符或标识符的语法递归会给解析器增加复杂性,但没有任何好处。
(`max`)
max
`(+)`
+
op ::= opSymbol* | `identifier`