Haskell 我可以让-Wincomplete模式更严格吗?

Haskell 我可以让-Wincomplete模式更严格吗?,haskell,pattern-matching,warnings,ghc,Haskell,Pattern Matching,Warnings,Ghc,有了GHC,我可以启用-Wincomplete模式来捕捉像这两种可能的错误情况 problem1 :: Either Int String -> Int problem1 (Left x) = x problem2 :: Either Int String -> Int problem2 x = case x of Left x' -> x' 显然,我忘了在这两个函数中处理Right情况,GHC会告诉我这一点。然而,在这两种情况下,编译器似乎在

有了GHC,我可以启用
-Wincomplete模式
来捕捉像这两种可能的错误情况

problem1 :: Either Int String -> Int
problem1 (Left x) = x

problem2 :: Either Int String -> Int
problem2 x = case x of
               Left x' -> x'
显然,我忘了在这两个函数中处理
Right
情况,GHC会告诉我这一点。然而,在这两种情况下,编译器似乎在没有任何警告的情况下就放了我一马

problem3 :: Either Int String -> Int
problem3 x = let Left x' = x in x'

problem4 :: Either Int String -> Int
problem4 = \(Left x) -> x
我还是忘了处理一个案子,但GHC似乎并不介意。我是否可以设置编译器标志来捕捉这样的情况:我使用
let
或lambda模式匹配,但没有处理所有情况?理想情况下,如果我做了这样的事情,我希望得到警告,这样我就可以将它重构成
case
语句或类似的语句


当然,为了完整性和子孙后代,我们也非常感谢与其他编译器相关的答案。

您似乎需要
-Wincomplete uni patterns
。作为一个基本上一直使用
-Wall
的人,我发现
-Wall
-Wincomplete模式未涵盖这些情况,这令人惊讶且糟糕


编辑:似乎GHC建议将其添加到
-墙
已被接受。我不确定状态(我在8.4上检查过):

我确实在测试代码或一次性脚本中使用了丑陋的东西,如
\(左x)->x)
,但我认为我更愿意禁用特定文件的警告。这在
lambdase
上是如何工作的?我真的不知道(事实证明,
-Wincomplete patterns
就足够了)作为一名
-Wall
用户,我同情您的悲伤,因为这张支票不包括在内。但这似乎正是我想要的。谢谢