私は今日Jason Hickeyのオンラインブック「Objective Camlの紹介」とFunctorsの章(140ページ)の章でSet Functorの中の次の行を読みました定義:OCamlではなぜリストコンストラクタは::演算子ではない
let add = (::)
コードを実行すると、「構文エラー」というエラーメッセージが表示されませんでした。 ocamlトップレベルへのプラグインの後、私は::
が実際には演算子ではなく、むしろタイプコンストラクタであることを理解しました。
しかし、私がHaskellについて知っていることから、相当する:
コンストラクタは演算子(関数)としても扱うことができます。
Prelude> :t (:)
(:) :: a -> [a] -> [a]
私の質問がある:OCamlのコンストラクタは、最初のクラスの値(本からのコードが最初から間違っていたことを示唆している)とされていなかった理由は、このケースですか?
私は通常この問題を解決する(演算子をラムダに変換する) '(fun x y - > x :: y)'を使います。ちょっと迷惑ですが、うまくいきます。また、 '::'が関数であっても、スワップされた '::'の引数が必要なときはいつでも同じことをしなければならないので、その点では意味があると思います。 –