私は今日、ジェイソン・ヒッキーのオンラインブック「Introduction to Objective Caml」を読んでいて、ファンクターの章(140ページ)で、セットファンクターの定義内の次の行に出くわしました。
let add = (::)
コードを実行すると、「構文エラー」エラーメッセージがあまり明るくなりませんでした。ocamlトップレベルにプラグインした後、それ::
は実際には演算子ではなく、型コンストラクターであることがわかりました。
しかし、Haskellについて私がほとんど知らないことから、同等の:
コンストラクターは演算子(関数)としても扱うことができます。
Prelude> :t (:)
(:) :: a -> [a] -> [a]
私の質問は:OCamlコンストラクターがファーストクラスの値になったことがない(本のコードが最初から間違っていたことを意味する)、そしてなぜこれが当てはまるのか?