$

Haskell$がやっと理解できたかも、という話。

f $ xf xと同じで、なにが嬉しいのか良くわからなかった。きっと遅延評価でなんか嬉しいことがあるんだろうかと想像して、正格なOCamlではきっとなにも嬉しいことがないんだろうと思っていた。

ところが、実は構文解析の優先順位が違う。中置演算子の方が関数適用より優先順位が低いので、例えばf (g x)f $ g xと書けることに気付いた。これ、なにげに気持ち良いかも。

※追記

良く考えたら、Haskell演算子の優先順位しらねーと思って、確認確認。

Prelude> (*) 2 3 + 1
7

((*) 2 3) + 1になってるな。

Prelude> (*) 2 succ 2

<interactive>:1:
    No instance for (Num (a -> a))
      arising from use of `*' at <interactive>:1
    In the definition of `it': it = (*) 2 succ 2

succNumインスタンスじゃないよーというエラー。ごもっとも。

Prlude> (*) 2 $ succ 3
8

ちゃんと、((*) 2) (succ 3)になってるっぽ。

うん。上のはウソじゃ無いと思う。