2014-09-03 61 views
8

某些语言(如Go & Rust)需要程序员勤勉地从源代码中删除所有死代码。这对代码可维护性和可读性有好处,如果对某些用户来说有点极端。如何在Haskell中启用死代码警告(GHC)

如何在Haskell中启用此功能? (可能吗?)例如,在下面的代码中,我想url2被标记为死代码,因为它在main中未使用。

url1 = "http://stackoverflow.com" 
url2 = "http://stackexchange.com" 

main = print url1 

只见参照一些编译器标志(例如-fwarn-unused-binds-fwarn-name-shadowing-fwarn-hi-shadowing),但他们都不来完成我想要的东西。

module Main(main) where 
... 

如果模块头球攻门仅仅高出

module Main where 

那么你:

如果适当地限制从模块输出的列表,如
+0

当你编译代码时,有没有什么用'-Wall'显示关于未使用的名字?如果没有,那么GHC并没有警告它。 – bheklilr 2014-09-03 16:20:04

+0

不可以。强制类型签名被添加,但不是死代码警告。 – 2014-09-03 16:21:52

+0

然后我不相信GHC会检查。请参阅[GHC文档](http://www.haskell.org/ghc/docs/7.6.3/html/users_guide/options-sanity.html)了解可用的警告。 – bheklilr 2014-09-03 16:23:32

回答

17

GHC将报告url2-fwarn-unused-binds死码隐式导出所有内容,因此它不能考虑任何顶级绑定未被使用。

+0

太好了。有没有办法在源文件中需要“模块”行? – 2014-09-03 16:55:08

+0

如果未指定'module',则默认为'module Main(main)where' - 请参阅https://www.haskell.org/onlinereport/haskell2010/haskellch5.html#x11-990005.1,但我不知道的任何警告,允许您坚持提供'module'行。 – 2014-09-03 17:25:56