我不是很精通 Haskell,所以这可能是一个非常简单的问题。
有什么语言限制Rank2Types解决? Haskell 中的函数不是已经支持多态参数了吗?
最佳答案
Do not functions in Haskell already support polymorphic arguments?
它们可以,但只有 1 级。这意味着虽然您可以编写一个无需此扩展即可接受不同类型参数的函数,但您不能编写在同一调用中将其参数用作不同类型的函数。
例如,没有这个扩展名就不能输入下面的函数,因为
g
在 f
的定义中与不同的参数类型一起使用: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/