Приоритет приложения инфиксной функции Haskell - PullRequest
24 голосов
/ 15 ноября 2011

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

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

Ответы [ 2 ]

23 голосов
/ 15 ноября 2011

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

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

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

infixl 7 `op`
9 голосов
/ 15 ноября 2011

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

infixl 7 `quot`

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...