モジュールとオブジェクト
の機能が「かぶっている」という件が(一部で)盛り上がっていたようなので超遅れて反応。OCamlのオリジナルの論文*1やMoby関係などでも議論はありますが、Advanced Module Systems: A Guide for the Perplexedの33〜38ページあたりが参考になるかも。要するに、オブジェクトでは
- 複数の抽象データ型を同時に定義できない。(単数ならオブジェクトでも良い。多相バリアントだと「抽象」型にはならない。)
- (インターフェースで)特定の形の操作しか表せない。たとえばbinary methodは扱えない。
ということみたいです。逆に「動的な差し替え」はMoscow MLみたいなfirst-class moduleがないと、モジュールではできませんが…
ところで、あけましておめでとうございます。