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

Gar*_*uma 8 haskell ghc

有些语言(如Go和Rust)要求程序员努力从源代码中删除所有死代码.如果某些用户有点极端,这在代码可维护性和可读性方面具有优势.

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

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

main = print url1
Run Code Online (Sandbox Code Playgroud)

我看到了一些编译器标志的引用(例如-fwarn-unused-binds,-fwarn-name-shadowing-fwarn-hi-shadowing),但它们似乎都没有达到我想要的效果.

GS *_*ica 17

如果您适当地限制模块的导出列表,GHC将报告url2为死代码-fwarn-unused-binds,例如:

module Main(main) where
...
Run Code Online (Sandbox Code Playgroud)

如果你的模块标题是公正的

module Main where
Run Code Online (Sandbox Code Playgroud)

然后你隐式导出所有内容,因此它不能认为任何顶级绑定未被使用.