让f x y = x * y
。我们可以通过两种方式应用此功能:f 5 6
,或使用中缀表示法5 `f` 6
。运算符规则是否适用于最后一个表达式?这个应用程序有什么优先权?它只是另一种形式的函数应用程序,它也具有最高优先级吗?
我认为编译器会看到这种特殊形式(由于``
和/或以字母(?)开头的名称),并且实际上将其视为普通函数应用程序,而不是将其视为运算符。
答案 0 :(得分:23)
Haskell 98 Report有一个关于Operator Applications的部分可以清除它:
运算符是运算符符号,例如+或$$,或者是运算符 普通标识符包含在严重重音符号(反引号)中,例如 `op`。例如,不是编写前缀应用程序op x y, 可以编写中缀应用程序x`op`y。如果没有固定声明 给出'op`然后它默认为最高优先级并且离开 相关性(参见第4.4.2节)。
正如其他答案所示,报告中还有一个关于Fixity Declarations的部分,允许您定义自己的固定性,例如:
infixl 7 `op`
答案 1 :(得分:9)
如果没有给出明确的固定声明,例如
infixl 7 `quot`
反向中缀函数的默认固定性为infixl 9
,因此将被视为具有相同固定性的任何其他中缀运算符。