ほんとにモジュールはいらないか*1

module vs object

うーん…

型システム的には,Polymorphic recursionがメソッドの中に出てくるようなやつは,OCamlのオブジェクトでは書けないので,と思ったけど,Moduleみたいに使うという話ならちょっと違うか.(でもこのあたりに罠はありそうな気がするけど,caml-listでも話題になったんなら,罠があるならGarrigue先生が突っ込んでるはずだから違うのかも)

歴史的には,オブジェクトの型推論が難しかったのでModuleが先に発展してそれで過去の資産のためにModuleが多用されてる,とか?あるいはPolymorphic Methodみたいのを使いたい場合はModuleの方が型推論してくれて楽とか(でもFunctorするにはシグネチャを書かないといけませんが).

あとは,オブジェクトの方が実行速度的に不利だったような.メソッドをいちいち渡すので,その分のオーバーヘッドがあるかも.(けど,タイプクラス関連でディクショナリパッシングというほとんど同じことをやってるHaskellがなんとかなってるんだから,やっぱりOCamlの実装がタコなだけなのかも.)


少なくとも,典型的なケースではいらないかも,というのは同意できます.(多分,Moduleでできてオブジェクトではできない,病的なケースはあると思います.)