如何在Haskell (GHC)中启用死代码警告

8
一些语言(如Go和Rust)要求程序员从源代码中勤奋地删除所有无用代码。虽然对于一些用户来说有点极端,但这有助于代码的可维护性和可读性。
我该如何在Haskell中启用此功能?(是否可能?)例如,在以下代码中,我希望将url2标记为死代码,因为它在main中没有被使用。
url1 = "http://stackoverflow.com"
url2 = "http://stackexchange.com"

main = print url1

我看到一些编译器标志的参考(例如-fwarn-unused-binds-fwarn-name-shadowing-fwarn-hi-shadowing),但它们似乎都不能实现我想要的功能。


编译该代码时,是否出现了关于未使用名称的“-Wall”警告?如果没有,则 GHC 不会发出警告。 - bheklilr
不,这会强制添加类型签名,但不会产生死代码警告。 - Garrett Bluma
那么我不相信 GHC 会检查这个。请参阅 GHC 文档 以了解可用的警告信息。 - bheklilr
1个回答

17

如果你从模块中适当地限制了导出列表,例如:

-fwarn-unused-binds

GHC将使用url2报告未使用的代码。

module Main(main) where
...
如果您的模块标题只是:
module Main where

那么你会默认导出所有东西,因此它不能将任何顶级绑定视为未使用。


太好了。有没有办法在源文件中也要求一个 module 行? - Garrett Bluma
如果未指定module,则默认为module Main(main) where - 请参见https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1,但我不知道是否有任何警告可以让您坚持提供`module`行。 - GS - Apologise to Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接