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