【发布时间】:2018-10-11 14:42:21
【问题描述】:
考虑下面的 Haskell 代码
module TypeErrors where
f xs = [True | _ <- repeat 0]
x = (x, x)
Glasgow Haskell 编译器(版本 7.8.4)给出三种类型错误。第二个和第三个来自第 3 行暗示的无限类型。第一个是
TypeErrors.hs:2:32:
No instance for (Num t0) arising from the literal ‘0’
The type variable ‘t0’ is ambiguous
注释掉第 3 行后,模块按预期编译。我想更好地了解 GHC 是如何创造奇迹的。所以我的问题是:
当且仅当第 3 行存在时,为什么 GHC 反对第 2 行?
【问题讨论】:
-
因为有多个错误...
-
当我try your code online时,我只收到两个错误(都在第 3 行)
-
@sepp2k 这很有趣。我注意到 ideone 使用 GHC 8.0.1。我用 GHC 7.8.4 编译。也许错误(如果是一个)已修复。
-
GHC 7.8.4 已经很老了。如果有其他错误,它可能有一个关于将警告报告为错误的错误。或者它可能将其报告为警告,而您只是误读了?在正常的 GHC 操作中,该行肯定会导致有关默认不明确类型的警告。
-
很好的问题——精确、最小、所有细节都需要我们自己尝试。我很少支持问题,但这个问题值得。
标签: haskell types functional-programming ghc