c++ - "True Polymorphism"的例子? (最好使用 Haskell)

标签 c++ haskell polymorphism parametric-polymorphism

<分区>

我见过很多“真正的多态性”的部分定义,例如 herehere但我在任何地方都找不到两个具体示例的区别的明显示例。

我知道重载 + 运算符是某种形式的多态性,它在 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/

相关文章:

c++ - 从 Box 计算 AABB(center, halfSize, rotation)

linux - 好的,用于 Linux 的小型 Haskell 编译器?

java - Java 中的多态性、继承和数组排序练习

Java 接口(interface)和类型多态性,一种实现与扩展

c++ - Boost序列化问题

c++ - 如何更新 Node.js native 插件以使用新的 API?

c++ - 如何在 macOS 上的 Qt 中使用 OpenMP 进行编译?

haskell - Clojure 中的 mapcat 和 Haskell 中的 concatmap 有什么区别?

haskell - 在 QuickCheck 中使用自定义生成器与任意实例

java - Java 多态中对象的字段访问和内存分配