4

假设我通常希望收到关于代码中不完整模式的警告,但有时我知道某个函数的模式不完整,我知道这很好。

GHC 的警告粒度是每个模块的,并且没有办法更改有关特定功能或定义的警告,这仍然是真的吗?

4

1 回答 1

6

是的,仍然正确,但您可以使用error.

f (Just a) = show a

没有案例Nothing给出警告但添加

f Nothing = error "f: Nothing supplied as an argument. This shouldn't have happened. Oops."

摆脱警告。

您的问题的按功能解决方案是给 Haskell 一些您认为永远不会运行的代码,以保持安静。

请注意:我认为您的代码应该是健壮的并且涵盖所有可能发生的情况,除非您能证明它永远不会发生。我认为解决这个限制并不是很好的做法。

(您可能认为这是一个敞开的后门,可以破解有用的编译时检查,应该停止-Wall,但我可以混淆我的回合您选择的任何简单限制,我认为该问题的完整解决方案将基本上解决了停机问题,所以我们不要责怪编译器。)

于 2012-10-03T22:52:35.087 回答