Can I disable the “non-exhaustive pattern matches” warning only for lambdas?

本秂侑毒 提交于 2019-12-03 11:03:00

Yes, but only in GHC 7.2 onwards; pass -fno-warn-incomplete-uni-patterns (e.g. in your Cabal file's ghc-options field, or in an {-# OPTIONS_GHC #-} pragma at the top of your file).

However, this will also disable the warning for pattern bindings, so let Just x = Nothing in x won't produce a warning. case statements are unaffected.

Do you have such situations quite often? This is a code smell IMHO. I'd like to see some such lambdas and I am quite sure we can make a better version that also handles empty lists quite fine. And in all other cases you might go for a NonEmpty list type wrapper.

hammar

In the case of map, you could write this as a list comprehension.

[... | (x:xs) <- ls]

This will not produce any warnings. Although, if an empty list does show up, this will simply filter it out rather than throw an exception, which might conceal errors. Going the type safe route as Ingo suggests might be a better option if you're worried about that.

I would go for {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-} instead of {-# OPTIONS_GHC -fno-warn-incomplete-uni-patterns #-}. And I would recommend using per-file approach instead of putting it into you cabal file as it is generally good practice to keep getting warnings of this kind.

You could write

{-# LANGUAGE LambdaCase #-}
map (\case (x:xs)->...; [] -> error "wut") ls

In "wut" you could then describe why that should not have happened.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!