Я пытаюсь что-то проверить для себя относительно приоритета операторов и функций в Haskell. Например, следующий код
list = map foo $ xs
можно переписать как
list = (map foo) $ (xs)
и в конечном итоге будет
list = map foo xs
Раньше у меня был вопрос, почему первая формулировка не будет переписана как
list = (map foo $) xs
, поскольку приоритет функции всегда выше приоритета оператора, но я думаю, что нашел ответ: операторам просто не разрешено быть аргументами функций (за исключением, конечно, если вы заключите их в скобки). Это правильно? Если так, я нахожу странным, что об этом механике / правиле нет ни в RWH, ни в «Learn the a Haskell», ни в других местах, которые я искал. Поэтому, если вы знаете место, где указано правило, пожалуйста, ссылку на него.
- изменить: Спасибо за ваши быстрые ответы. Я думаю, что моя путаница возникла из-за мысли, что операторный литерал каким-то образом оценивает что-то, что может быть использовано функцией в качестве аргумента. Это помогло мне вспомнить, что инфиксный оператор может быть механически переведен в префиксные функции. Выполнение этого с первым составом приводит к
($) (map foo) (xs)
, когда нет никаких сомнений в том, что ($) является функцией-потребителем, и, поскольку две формулировки эквивалентны, тогда $ literal в первой формулировке не может быть использован map.