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
我已经制作了自己的数据类型,当我严格要求时会有这些警告,当它是懒惰的时候,没有。虽然我测试过两个版本同样快速运行,但这里的严格程度可能过高。无论如何这些警告是严重的吗?
答案 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
传递给编译器来消除它们。结果将是更大的代码(更多的特化),这可能更快,同样快,或者在不幸的情况下更慢。如果性能至关重要,您应该尝试比较。