Оператор 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.

Ответы на вопрос(5)

Ваш ответ на вопрос