gpt4 book ai didi

haskell - 拥抱 `/` 与类型推断

转载 作者:行者123 更新时间:2023-12-05 00:00:37 28 4
gpt4 key购买 nike

在 GHCi 中,以下代码可以正常工作:

f1 :: Float
f1 = f2

-- f2 :: Float
f2 = 1/1

但是在 Hugs 中,我得到了一个类型错误——它想成为一个 Double。当我取消注释 f2 的类型签名时,它工作正常。

不应该完全关注类型推断吗?

这是拥抱中的错误吗?

我查看了 / 的类型和 Double 的实例和 Float - /作品 Fractional s,并且 Double 都有一个 Fractional 实例和 Float ,所以这应该不是问题。

最佳答案

当没有类型签名绑定(bind)时,f2具有多态推断类型( Fractional a => a ),由于单态限制(除非禁用),因此必须单态。在没有其他默认声明的情况下,带有 Fractional 的类型变量约束默认为 Double . Hugs 似乎先做默认设置,然后在尝试绑定(bind)声明的 Float 时窒息。 f1Double值(value) f2 . GHC 进一步观察,发现 f2用于类型 Float , 因此单态 f2Float .

我不确定在这种情况下语言标准要求什么行为,但我认为 GHC 是正确的,因为单态应该只在键入绑定(bind)组后发生,我认为 f1f2一起形成一个绑定(bind)组,因为 f1使用 f2 .

关于haskell - 拥抱 `/` 与类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9874685/

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