haskell - 为什么 Glasgow Haskell 编译器在这里报告多个类型错误?

标签 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 是如何创造奇迹的。所以我的问题是:

Why does GHC object to line 2 if and only if line 3 is present?

最佳答案

对我来说似乎是一个错误。我可以确认您描述的行为出现在 7.8.4 中,但没有出现在 7.10.3、8.0.2、8.2.2 或 8.4.2 中,所有这些都有零或两个错误,而不是零或三个。

关于haskell - 为什么 Glasgow Haskell 编译器在这里报告多个类型错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50118536/

相关文章:

haskell - 为什么这违反了 "Coverage Condition"

haskell - 在 Haskell 的无点函数中理解 `ap`

c++ - 数组和文件大小的数据类型

c - 指向数据类型的单个对象/实例的指针的命名

javascript - 如何应用callcc,以便它提供转义继续机制以与继续monad一起使用

Haskell 反向函数

haskell - 实现相同功能的不同类型的映射列表?

linux - 如何从源代码完全引导 GHC 和 cabal

Haskell "No instance for"简单代码中的类型错误

functional-programming - 我只是没有继续!