Оператор Haskell против приоритета функции
Я пытаюсь что-то проверить для себя относительно приоритетов операторов и функций в 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.