Haskell 我可以让-Wincomplete模式更严格吗?
有了GHC,我可以启用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会告诉我这一点。然而,在这两种情况下,编译器似乎在
-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
用户,我同情您的悲伤,因为这张支票不包括在内。但这似乎正是我想要的。谢谢