この種のポリモーフィズムはジェネリックプログラミングと呼ばれますが、その背後にある理論的概念はパラメトリックポリモーフィズムと呼ばれます。
あなたが提供した2つの例は確かにパラメトリック多態性を示していますが、OCamlはC ++によって提供されるもの(より実用的でより多くの警告があるソリューションです)ではなく、強力な推論型チェッカーによってサポートされているため、実際の違いはC++ではコードが複製されることですOCamlでコードで使用するすべての型について、統合による暗黙の型変数の置換が存在することを確認することにより、型チェッカーによって解決されます。
OCamlでは、通常、型で注釈が付けられているものがないという理由だけで、すべてが多形になる可能性があります。したがって、実際には、関数の引数として何かを使用できる場合は、暗黙的に許可されます。
たとえば、型変数を使用してポリモーフィックメソッドを定義できます。
let swap ((x : 'a), (y : 'b)) : 'b * 'a = (y, x)
これは、タイプ'a
o'b
が何であれ機能するようにします。
OCamlのもう1つの強力なポリモーフィック機能は、ファンクター(一般的なC ++ファンクターではありません)ですが、他のモジュールによってパラメーター化されたモジュールです。この概念は恐ろしいように聞こえますが、実際にはOCamlコードのより高次のポリモーフィックな振る舞いを表しています。