gpt4 book ai didi

Haskell 返回类型混淆

转载 作者:行者123 更新时间:2023-12-02 13:32:31 26 4
gpt4 key购买 nike

在学习“Haskell 编程的第一原理”时,我对以下问题的答案感到困惑:

If the type of kessel is (Ord a, Num b) => a -> b -> a, then the type of kessel 1 2 is

a) Integer
b) Int
c) a
d) (Num a, Ord a) => a
e) Ord a => a
f) Num a => a

答案是 d) - 但我认为答案应该是 e),因为第一个参数 (a) 的类型签名的唯一要求是它是一个 Ord。那么为什么不返回呢?

kessel 'd' 2

有效并且类型为Char - 与Num无关!

我不明白什么?

感谢您的帮助。

最佳答案

1的类型是Num a => a。当您将其作为第一个参数传递给 kessel 时,其类型仅限于 (Num a, Ord a) => a 因为 kessel 需要Ord 作为其第一个参数。由于结果的类型与第一个参数的类型相同,因此您将得到 (Num a, Ord a) => a 作为结果类型。

请注意,这与第二个参数的类型无关。我想第二个论点只是为了让你感到困惑。如果函数是:

kessel :: Ord a => a -> a

那么kessel 1的类型仍然是(Num a, Ord a) => aNum 之所以存在,是因为它是 1 的类型,而不是因为 kessel 的类型。

kessel 'd' 2 的类型是 Char,而不是 Ord Char => Char,因为 Char 已经是实现 Ord 的具体类型,因此没有必要进行限制。

关于Haskell 返回类型混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42589622/

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