a -> String ,并且 2 是多态的,如果不幸 show 2::Int 与 s-6ren">
gpt4 book ai didi

class - 如果 Haskell 的编译器总是需要用 "::Int"指定多态函数的多态参数,为什么 "show 2"是合法的

转载 作者:行者123 更新时间:2023-12-04 22:06:08 24 4
gpt4 key购买 nike

如果我们输入 show 2 ,那么我们将得到“2”。但问题是 show 满足 show :: Show a => a -> String ,并且 2 是多态的,如果不幸 show 2::Intshow 2::Integer 不同,我们必须编写 show 2::Intshow 2::Integer 而不是简单的 show 2

我拒绝假设编译器有足够的智能知道 (A a)=>show a 时,A 的所有当前实例都是 Show,给出相同的结果,我们不需要指定 show a::X 并且当 (A a)=>show a 时,A 的所有当前实例都是 Show,给出不同的结果,我们必须指定 show a::X

最佳答案

这是由于默认规则。所以 show 2 实际上是 show (2::Integer) 。您可以在 haskell 2010 报告 here in section 4.3.4 中阅读此内容。

回答你的第二个问题,编译器不够智能。这是由于类型默认造成的。

你可以检查

 number = 2

在 ghci
*Main> :t number 
number :: Integer

现在您的自定义默认签名
 default (Int)
number = 2

在 ghci
*Main> :t number
number :: Int

您可以在我引用的文档中阅读有关何时可以默认类型的信息。

关于class - 如果 Haskell 的编译器总是需要用 "::Int"指定多态函数的多态参数,为什么 "show 2"是合法的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14064296/

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