【问题标题】:How to [temporarily] suppress "defined but not used" warnings?如何[暂时]抑制“已定义但未使用”的警告?
【发布时间】:2013-09-14 17:41:17
【问题描述】:

当我对 Haskell 程序进行原型设计时,我总是会收到数百条这样的警告(不是开玩笑):

/Users/bob/SourceCode/course/is/expriment/LiftedSpine2.hs:70:15:
    警告:已定义但未使用:`ta'

/Users/bob/SourceCode/course/is/expriment/LiftedSpine2.hs:72:15:
    警告:已定义但未使用:`ta'

/Users/bob/SourceCode/course/is/expriment/LiftedSpine2.hs:77:26:
    警告:已定义但未使用:`v'

是否可以暂时删除这些警告? 我试着把它放在我的 .hs 文件中:

 {-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-name-shadowing 
    -fwarn-monomorphism-restriction -fwarn-hi-shadowing
 #-}

不幸的是,它不起作用,虽然我也尝试过 :set -fno-warn-unused-binds,但它仍然不起作用。

非常感谢!

【问题讨论】:

  • 我真的希望 OPTIONS_GHC 的事情确实有效,但还没有开始跟进找出确切的行为、提交票证等。
  • 令人惊讶的是,似乎没有人解决 OPTIONS_GHC 不起作用的说法。我认为这种说法是错误的。以下对我有用:{-# OPTIONS_GHC -Wall -fno-warn-unused-binds #-}

标签: haskell ghc


【解决方案1】:

另一种可能性,取决于您的情况:我相信您可以在标识符前加上下划线来抑制此警告。所以:

_x = 42

如果不使用_x,则不会生成警告。

【讨论】:

  • 确实如此。为什么会这样呢?
  • 我认为是因为有人认为应该这样做。有时你想记录一个参数的含义,即使你不使用它。
【解决方案2】:

GHC 有两个可以触发Warning: Defined but not used 的警告标志。

您需要一些命令行标志-fno-warn-unused-binds-fno-warn-unused-matches 的组合。

【讨论】:

  • 如果运行 hdevtools 你必须在前面加上 -g 以便这些工作,像这样:hdevtools check -g-Wall -g-Wall -g-fno-warn-unused-binds -g-fno-warn-unused-matches source.hs
【解决方案3】:

当我想暂时摆脱一些警告时,我通常使用 -w 来抑制所有警告。

【讨论】:

  • 但是您可能会错过其他您可能想看到的警告。
  • 是的,但是当我暂时删除警告时,它是暂时的,所以我很快就会看到这些警告。
【解决方案4】:

我为此使用了一种解决方法:

我编译时没有警告,但随后我使用HLint 工具为我显示警告。 HLint 具有单独打开警告的功能。

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多