假设我通常希望收到关于代码中不完整模式的警告,但有时我知道某个函数的模式不完整,我知道这很好。
GHC 的警告粒度是每个模块的,并且没有办法更改有关特定功能或定义的警告,这仍然是真的吗?
是的,仍然正确,但您可以使用error
.
f (Just a) = show a
没有案例Nothing
给出警告但添加
f Nothing = error "f: Nothing supplied as an argument. This shouldn't have happened. Oops."
摆脱警告。
您的问题的按功能解决方案是给 Haskell 一些您认为永远不会运行的代码,以保持安静。
请注意:我认为您的代码应该是健壮的并且涵盖所有可能发生的情况,除非您能证明它永远不会发生。我认为解决这个限制并不是很好的做法。
(您可能认为这是一个敞开的后门,可以破解有用的编译时检查,应该停止-Wall
,但我可以混淆我的回合您选择的任何简单限制,我认为该问题的完整解决方案将基本上解决了停机问题,所以我们不要责怪编译器。)