Препринт приложения функции префикса Haskell
Пусть f x y = x * y
. Мы можем применить эту функцию двумя способами: f 5 6
или, используя нотацию infix, 5 `f` 6
. Используются ли правила оператора для этого последнего выражения? Какое преимущество будет у этого приложения? Это просто еще одна форма приложения функции, и будет ли она также иметь высокий приоритет?
Я предполагаю, что компилятор видит эту специальную форму (из-за ``
и/или имени, начинающегося с буквы (?)), и фактически рассматривает это как приложение обычной функции, вместо того, чтобы рассматривать его как оператор.
Ответы
Ответ 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
, поэтому будет рассматриваться как любой другой инфиксный оператор с той же фиксированностью.