Подтвердить что ты не робот

Препринт приложения функции префикса Haskell

Пусть f x y = x * y. Мы можем применить эту функцию двумя способами: f 5 6 или, используя нотацию infix, 5 `f` 6. Используются ли правила оператора для этого последнего выражения? Какое преимущество будет у этого приложения? Это просто еще одна форма приложения функции, и будет ли она также иметь высокий приоритет?

Я предполагаю, что компилятор видит эту специальную форму (из-за `` и/или имени, начинающегося с буквы (?)), и фактически рассматривает это как приложение обычной функции, вместо того, чтобы рассматривать его как оператор.

4b9b3361

Ответ 1

Haskell 98 Report содержит раздел Операторские приложения, который очищает его:

Оператор является либо символом оператора, например + или $$, либо является обычный идентификатор, заключенный в серьезных акцентах (backquotes), таких как `Op`. Например, вместо написания префиксного приложения op x y, можно написать приложение infix x `op` y. Если заявка на фиксацию отсутствует задается для `op`, тогда он по умолчанию имеет наивысший приоритет и остается ассоциативности (см. раздел 4.4.2).

Как указано в других ответах, в отчете также есть раздел Декларации об ошибках, который позволяет вам определить свою собственную фиксацию, например:

infixl 7 `op`

Ответ 2

Если не указано явное объявление четности, например,

infixl 7 `quot`

Функция обратного инфикса имеет фиксированное значение по умолчанию infixl 9, поэтому будет рассматриваться как любой другой инфиксный оператор с той же фиксированностью.