gpt4 book ai didi

Haskell RankNTypes - 函数域的限制

转载 作者:行者123 更新时间:2023-12-04 16:23:56 25 4
gpt4 key购买 nike

不明白为什么会这样,引用:What is the purpose of Rank2Types? -> @dfeuer 解释:

... Requiring an argument to be polymorphic doesn't just allow it to be used with multiple types; it also restricts what that function can do with its argument(s) and how it can produce its result...

f :: (forall a . [a] -> a) -> IO ()

... In fact, no function returning an element not in the list it is given will typecheck

在任何对 rank-N 类型的解释中,我都没有看到这种效果(或好处)的描述,大部分时间都是关于让被调用者选择类型等的故事……这对我来说很清楚也很容易掌握,但我看不出我们可以通过哪种优点(仅扩展等级)来控制/限制功能域(和共同域)......

如果有人可以更深入地了解此处涉及的 rankN 机制。谢谢

最佳答案

只需根据您在顶层声明的多态函数来考虑它。带有类似签名的函数

foo :: [Int] -> Int

有很多可能的实现,比如

foo = sum

foo = length

foo _ = 39

但如果签名是合法的,这些都不合法

foo :: [a] -> a

因为你不能给出一个整数作为结果——你必须提供一个调用者要求的任何类型的结果。因此实现受到更多限制:结果 必须 来自输入列表,因为这是您知道元素具有类型 a 的唯一地方,无论调用者实际实例化什么这到。只有类似

foo = head

然后就可以了。

您的 RankN 签名要求 其参数 是这样一个多态函数,即参数不能是 [Int] -> Int 而只能是限制性更强的 [a] -> a.

关于Haskell RankNTypes - 函数域的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69043542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com