在 GHC 中,有没有一种方法可以在不实际生成输出的情况下检查编译情况?

In GHC, is there a way I can check compilation without actually producing output?

有时,我将代码写入文件只是为了检查它是否编译——对生成的二进制文件不感兴趣。

例如,如果我正在做一个学习练习并且想要产生一些错误或者查看某些代码是否编译没有错误,我希望看到普通的编译输出打印到终端但不生成 *. 运行 ghc <myprogram>.hs.

出现的 hi 或 *.o 文件

我有时使用 runhaskell 有效地做到这一点,但这并不理想——它需要一个 main 函数,并且实际运行该程序,而我只是在寻找编译检查。

有没有办法在运行 GHC时抑制生成,只显示普通的编译错误和警告?

this question 的答案之一提出了我正在寻找的答案:ghc 选项 -fno-code

即编译但不生成二进制文件:

$ ghc -fno-code <myprogram>.hs

本着与问题目的相同的精神,除了@mherzl 的有效答案外,我的答案如下:

while true;do
    inotifywait -e modify myprogram.hs
    ghc -fno-code myprogram.hs
done

这仅适用于具有 inotifywait 工具的 Linux 系统。它会阻止并检测文件是否被修改。