如何仅在编译为库时禁用“-Werror”?

How do I disable `-Werror` only when compiling as a library?

我有

ghc-options:
- -Wall
- -Werror

在我的 package.yaml 中,它可以很好地构建 GHC 8.6。

但是在 GHC 9 代码库中使用该项目时,由于不必要的 MonadFail 导入而出错。

如何更改库以使其在其他项目中使用时不会中止编译?

我试过了

ghc-options:
  "$everything": -Wwarn

在下游(依赖)项目中,但这似乎并不影响它。我预计 -Wwarn 会覆盖 -Werror,因为 $everything 应该涵盖偶数依赖项。

我认为,在库本身上指定 -Werror 是不好的做法。其他编译器标志也是如此,例如 -O2 的优化。 另一方面,设置 -Wall 绝对是好东西,再加上我头脑中的其他一些警告标志,例如。 -Wincomplete-record-updates-Wincomplete-uni-patterns-Wredundant-constraints

如果您想在处理库或 CI 时将构建警告转换为错误,这是明智之举,那么您可以在

中启用它
  • stack.yaml:
ghc-options:
  my-library: -Werror
  • cabal.project:
package my-library
  ghc-options: -Werror

话虽如此,您可以通过以与上述完全相同的方式为该库设置 -Wwarn 来关闭任何下游库的 -Werror,这将覆盖原始标志。