除非删除中间文件,否则 GHC 警告将被抑制

GHC warnings are suppressed unless intermediate files are deleted

我正在编译我的程序:ghc -Wall foo.hs 我收到了一些有用的警告:

foo.hs:14:1: Warning:
    Top-level binding with no type signature: main :: IO ()

现在,如果我立即重新运行 ghc -Wall foo.hs,我不会收到任何警告。如果我删除中间文件 foo.ofoo.hi,然后 运行 ghc -Wall foo.hs,警告会重新出现。

这是有意为之的行为吗?我可以做到始终显示警告而不必删除中间文件吗?

如果编译结果(.hi.o)已经存在,那么 GHC 将不会重新编译 .hs。 GHC 仅在编译(或类型检查).hs.

时发出警告

也许您可以使用 ghc -fforce-recomp foo.hs 强制重新编译。 (如果你只是想进行类型检查,那么使用 ghc -fforce-recomp -fno-code foo.hs 会更快,但是有一些 -fno-code 没有捕捉到的警告。)