haskell - Rank2Types 的目的是什么?

标签 haskell types polymorphism higher-rank-types

我不是很精通 Haskell,所以这可能是一个非常简单的问题。

有什么语言限制Rank2Types解决? Haskell 中的函数不是已经支持多态参数了吗?

最佳答案

Do not functions in Haskell already support polymorphic arguments?



它们可以,但只有 1 级。这意味着虽然您可以编写一个无需此扩展即可接受不同类型参数的函数,但您不能编写在同一调用中将其参数用作不同类型的函数。

例如,没有这个扩展名就不能输入下面的函数,因为 gf 的定义中与不同的参数类型一起使用:
f g = g 1 + g "lala"

请注意,完全有可能将多态函数作为参数传递给另一个函数。所以像 map id ["a","b","c"]是完全合法的。但是该函数只能将其用作单态。在示例中 map用途 id好像它有类型 String -> String .当然,您也可以传递给定类型的简单单态函数而不是 id .如果没有 rank2types,函数就无法要求其参数必须是多态函数,因此也无法将其用作多态函数。

关于haskell - Rank2Types 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12031878/

相关文章:

python - 使用 getter 和 setter 时的 if 语句?

matlab - MATLAB pos 函数的 Haskell/hmatrix 等价物是什么?

具有 NULL 时间的 Javascript Date() 对象

haskell - 跨类型构造函数编写通用仿函数实例?

haskell - 如何判断Codec.Picture加载的DynamicImage是什么类型

c++ - 机器码层虚函数和条件执行的区别

java - 如何将 .class 类型的参数传递给方法

haskell - Haskell非类型变量参数错误

haskell - 如何在Haskell中编写参数和结果都是多态的函数

haskell - 是否可以使用类型系统或不同的设计来捕获此错误?