<分区>
我见过很多“真正的多态性”的部分定义,例如 here和 here但我在任何地方都找不到两个具体示例的区别的明显示例。
我知道重载 +
运算符是某种形式的多态性,它在 Haskell 和 C++ 中的实现方式不同。有人可以准确地说明两种语言的例子有什么不同吗?
<分区>
我见过很多“真正的多态性”的部分定义,例如 here和 here但我在任何地方都找不到两个具体示例的区别的明显示例。
我知道重载 +
运算符是某种形式的多态性,它在 Haskell 和 C++ 中的实现方式不同。有人可以准确地说明两种语言的例子有什么不同吗?
最佳答案
您要查找的术语是“参数多态性”,它不同于“临时多态性”。
参数多态性的一个例子是Nothing
的类型签名:
Nothing :: Maybe a
类型中的 a
可以是任何可以想到的类型,因为 Nothing
包含所有 Maybe
。我们说 a
是参数多态的,因为它可以是任何类型。
现在考虑这种类型:
Just 1 :: (Num b) => Maybe b
这次 b
不能是任何类型:它只能是 Num
的实例类型。我们说 b
是临时多态的,因为它可以是一组类型的任何成员,由 Num
类的实例给出。
所以,回顾一下:
参数多态性:可以是任何类型
Ad-hoc 多态性:受类型类约束
关于c++ - "True Polymorphism"的例子? (最好使用 Haskell),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16265333/