「真のポリモーフィズム」の部分的な定義をたくさん見てきました。たとえば、こことここですが、2 つの具体的な例との違いの明確な例を見つけることができませんでした。
+
演算子のオーバーロードはポリモーフィズムの一種であり、Haskell と C++ では実装が異なることを理解しています。誰かが両方の言語の例で違いが何であるかを正確に示すことができますか?
あなたが探している用語は、「アドホック ポリモーフィズム」とは異なる「パラメトリック ポリモーフィズム」です。
パラメトリック ポリモーフィズムの例は、 の型シグネチャにありNothing
ます。
Nothing :: Maybe a
型内のは、すべての に存在するa
ため、考えられる任意の型である可能性があります。これは、任意の型になる可能性があるため、パラメトリックにポリモーフィックであると言います。Nothing
Maybe
a
次に、このタイプを検討してください。
Just 1 :: (Num b) => Maybe b
今回は、b
はどの型にもなり得ません。 のインスタンスである型にしかなり得ませんNum
。クラスb
のインスタンスによって与えられた型のセットの任意のメンバーになることができるため、アドホックなポリモーフィックであると言います。Num
要約すると、次のようになります。
パラメトリック ポリモーフィズム: 任意の型にすることができます
アドホック ポリモーフィズム: 型クラスによる制約