阅读polymorphism的维基百科定义时,我遇到一个问题:
Haskell支持哪些多态类型,哪些不支持?
像Wikipedia这样的外观没有包含某些Levity Polymorphism等多态类型的描述,这对我来说是新的,在Haskell中受支持。
我想提供一个Haskell Polymorphism的扩展列表,并附带示例进行深入研究。
看起来主要两个是:
答案 0 :(得分:9)
当前的Haskell中至少有四件事可以算作多态性:
Haskell的未来版本中可能会引入 两种其他类型的多态性:
匹配性多态性。允许高阶类型族同时使用类型构造函数和类型族作为参数。在论文Higher-order Type-level Programming in Haskell中进行了描述。
多重性多态性。允许高阶函数同时使用普通函数和线性函数作为参数。在论文Linear Haskell Practical Linearity in a Higher-Order Polymorphic Language中进行了描述。
一个人可能会问,为什么整个多态性全貌?在Haskell中似乎存在一个总体设计原则,即只要可以通过子类型化或多态性解决某些挑战,就应该首选多态性。
例如,来自高度多态性论文:
我们现在可以介绍本文的主要思想:替换子种类 具有多态性。
从介绍匹配性多态性的论文开始:
起初,您可能会认为我们需要子类型化,但是我们转向了多态性
从线性Haskell论文:
缺少子类型是我们设计中的故意选择
西蒙·佩顿·琼斯本人在47:00中的this talk上指出了重点。
每当要使用子类型化时,请改用多态。