编译时GHC混乱

时间:2011-12-21 17:21:20

标签: haskell ghc

GHC 7.0.3(ubuntu repoes)在编译警告期间产生

SpecConstr
    Function `$j_se6a{v} [lid]'
      has one call pattern, but the limit is 0
    Use -fspec-constr-count=n to set the bound
    Use -dppr-debug to see specialisations

我已经制作了自己的数据类型,当我严格要求时会有这些警告,当它是懒惰的时候,没有。虽然我测试过两个版本同样快速运行,但这里的严格程度可能过高。无论如何这些警告是严重的吗?

2 个答案:

答案 0 :(得分:4)

可以安全地忽略这些警告;由于内部细节,它们总是在GHC 7.0中生成 - 基本上,它们不是真正的警告,只是调试输出。

但是,根据this GHC bug report,您可以使用-dno-debug-output将其关闭。

如果升级到GHC 7.2,则不应再看到它们。

答案 1 :(得分:4)

这些消息(技术上甚至不是警告)表明GHC可以进行进一步的优化(可能会或可能不会导致性能提高),但由于构造函数专门化的限制没有。您也可以通过将-fspec-constr-count=n与足够大的n(默认值为3)或-fno-spec-constr-count传递给编译器来消除它们。结果将是更大的代码(更多的特化),这可能更快,同样快,或者在不幸的情况下更慢。如果性能至关重要,您应该尝试比较。