Haskell支持哪些多态类型?

mkU*_*tra 5 polymorphism haskell types

阅读Wikipedia对多态的定义,我想到一个问题:

Haskell支持哪些多态类型,哪些不支持?

看起来Wikipedia并未包含对某些多态类型的描述,例如Levity Polymorphism,这对我来说是新的,在Haskell中受支持。

我想知道是否有扩展的Haskell多态性列表,并附带示例进行深入研究。

看起来主要是两个:

  • 参数多态性
  • 临时多态性

dan*_*iaz 14

当前的Haskell至少有四件事可以算作多态:

Haskell的未来版本中可能会引入两种以上的多态性:

有人可能会问,为什么整个多态性全貌?在Haskell中似乎存在一个总体设计原则,即只要可以通过子类型化多态性解决某些挑战,就应该优先选择多态性

例如,从高度多态性论文中:

现在,我们可以提出本文的主要思想:用种类多态性替换子种类。

从介绍匹配性多态性的论文中:

最初,您可能会认为我们需要子类型化,但是我们转向了多态性

从线性Haskell论文中:

缺乏子类型化是我们设计中的故意选择

西蒙·佩顿·琼斯(Simon Peyton Jones)本人在本次演讲中的47:00提出了意见。

每当您要使用子类型化时,请改用多态。

  • @mkUltra 高阶多态性允许在作为参数传递给高阶函数的函数内部使用参数/临时多态性,默认情况下不启用 https://downloads.haskell.org/~ghc/latest/ docs/html/users_guide/glasgow_exts.html#extension-RankNTypes https://kseo.github.io/posts/2016-12-27-higher-rank-polymorphism.html 它还启用了更高等级的种类 https:// downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#higher-rank-kinds (2认同)