
#11475: Lint should check for inexhaustive alternatives -------------------------------------+------------------------------------- Reporter: simonpj | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): I suggest being less ambitious! Do the simple things first. {{{ case (case ... of ... -> Left x) of Left y -> ... }}} GHC itself is unlikely to prune the alternative in the outer case, precisely because it's not so obvious that the inner case can only return Left. {{{ bar = ... case foo a b of (:) x y -> ... }}} Same here. In short, dealing with in-scope pattern matches and GADTs is worth doing first. Then when you get a false positive (which you say you are) we can think about them. (For `foo`, the `CprResult` part of the strictness signature will tell that `foo` only returns `(:)` but I'm a bit surprised that GHC actually uses this to prune the case alternatives. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11475#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler