Haskell での演算子と関数の優先順位について、自分で何かを検証しようとしています。たとえば、次のコード
list = map foo $ xs
として書き換えることができます
list = (map foo) $ (xs)
そして最終的には
list = map foo xs
私の質問は、なぜ最初の定式化が次のように書き直されないのかということでした。
list = (map foo $) xs
関数の優先順位は常に演算子の優先順位よりも高いため、答えを見つけたと思います: 演算子を関数の引数にすることはできません (もちろん、括弧で囲む場合を除きます)。これは正しいですか?もしそうなら、RWH や Learn you a Haskell、または私が検索した他の場所のいずれにも、このメカニズム/ルールについての言及がないのは奇妙だと思います。そのため、ルールが記載されている場所を知っている場合は、リンクしてください。
-- 編集: 素早い回答ありがとうございます。私の混乱は、演算子リテラルが何らかの形で評価され、関数によって引数として消費される可能性があると考えたことから生じたと思います。中置演算子は機械的に前置関数に変換できることを思い出すのに役立ちました。これを最初の定式化に対して行うと、
($) (map foo) (xs)
($) が消費関数であることは疑いの余地がなく、2 つの定式化が同等であるため、最初の定式化の $ リテラルは map によって消費されません。