为什么Glasgow Haskell编译器会在此报告多个类型错误?

时间:2018-05-01 14:41:47

标签: haskell types functional-programming ghc

考虑以下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行?

1 个答案:

答案 0 :(得分:4)

对我来说看起来像个错误。我可以确认你描述的行为出现在7.8.4中,但不在7.10.3,8.0.2,8.2.2或8.4.2中,所有这些都有零或两个错误,而不是零或三。< / p>