Haskell中缀函数应用程序优先级

dem*_*emi 24 haskell function operators infix-notation operator-precedence

我们f x y = x * y.我们可以通过两种方式应用此函数:f 5 6或者,使用中缀表示法5 `f` 6.运算符规则是否适用于最后一个表达式?这个应用程序有什么优先权?它只是另一种形式的功能应用程序,它也具有最高优先级吗?

我想编译器会看到这种特殊形式(由于``和/或名称以字母(?)开头),并且实际上将其视为普通函数应用程序,而不是将其视为运算符.

Nic*_* Wu 24

哈斯克尔98报告有一个部分运营商应用扫清起来:

运算符是运算符符号,例如+或$$,或者是用重写符(反引号)括起来的普通标识符,例如`op`.例如,不是编写前缀应用程序op xy,而是可以编写中缀应用程序x`op`y.如果没有为'op`给出固定声明,那么它默认为最高优先级和左关联性(参见第4.4.2节).

如其他答案所示,报告还有一个关于Fixity声明的部分,允许您定义自己的固定性,例如:

infixl 7 `op`
Run Code Online (Sandbox Code Playgroud)


Dan*_*her 10

如果没有给出明确的固定性声明,例如

infixl 7 `quot`
Run Code Online (Sandbox Code Playgroud)

反向中缀函数具有默认的固定性infixl 9,因此将被视为具有相同固定性的任何其他中缀运算符.

  • `$`需要一个非常低的优先级,因为否则在将函数应用于非原子参数时你仍然需要括号,如果它意味着'(foo a)+(`foo $ a + b*c`将是毫无意义的. b*C)`.`$`的目的要求几乎其他一切都有更高的优先权.很多[相对]优先级,`*`比`+`等更紧密,在数学和其他编程语言中很常见.除了先前的公约之外,对[预期的]常见案例最方便的考虑因素将起到决定优先权的作用. (4认同)