考虑以下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行?
答案 0 :(得分:4)
对我来说看起来像个错误。我可以确认你描述的行为出现在7.8.4中,但不在7.10.3,8.0.2,8.2.2或8.4.2中,所有这些都有零或两个错误,而不是零或三。< / p>