4

「真のポリモーフィズム」の部分的な定義をたくさん見てきました。たとえば、ここここですが、2 つの具体的な例との違いの明確な例を見つけることができませんでした。

+演算子のオーバーロードはポリモーフィズムの一種であり、Haskell と C++ では実装が異なることを理解しています。誰かが両方の言語の例で違いが何であるかを正確に示すことができますか?

4

2 に答える 2

6

あなたが探している用語は、「アドホック ポリモーフィズム」とは異なる「パラメトリック ポリモーフィズム」です。

パラメトリック ポリモーフィズムの例は、 の型シグネチャにありNothingます。

Nothing :: Maybe a

型内のは、すべての に存在するaため、考えられる任意の型である可能性があります。これは、任意の型になる可能性があるため、パラメトリックにポリモーフィックであると言います。NothingMaybea

次に、このタイプを検討してください。

Just 1 :: (Num b) => Maybe b

今回は、bはどの型にもなり得ません。 のインスタンスである型にしかなり得ませんNum。クラスbのインスタンスによって与えられた型のセットの任意のメンバーになることができるため、アドホックなポリモーフィックであると言います。Num

要約すると、次のようになります。

  • パラメトリック ポリモーフィズム: 任意の型にすることができます

  • アドホック ポリモーフィズム: 型クラスによる制約

于 2013-04-28T17:08:50.267 に答える