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

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

最佳答案



它们确实可以,但是仅排名1。这意味着,尽管您可以编写不带此扩展名但接受不同类型参数的函数,但不能编写在同一调用中将其参数用作不同类型的函数。

例如,如果没有此扩展名,则不能键入以下函数,因为g的定义中f与不同的参数类型一起使用:

f g = g 1 + g "lala"

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

10-08 05:34