[GHC] #8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies ------------------------------------+------------------------------------- Reporter: tensor5 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Keywords: | Operating System: Unknown/Multiple Architecture: Unknown/Multiple | Type of failure: None/Unknown Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | ------------------------------------+------------------------------------- The code is: {{{ data K = Foo | Bar data D1 :: K -> * where F1 :: D1 Foo B1 :: D1 Bar class C (a :: K -> *) where data D2 a :: K -> * foo :: a k -> D2 a k -> Bool instance C D1 where data D2 D1 k where F2 :: D2 D1 Foo B2 :: D2 D1 Bar foo F1 F2 = True foo B1 B2 = True }}} With -Wall it gives the warning: {{{ Test.hs:23:5: Warning: Pattern match(es) are non-exhaustive In an equation for `foo': Patterns not matched: F1 B2 B1 F2 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies -------------------------------------------------+------------------------- Reporter: tensor5 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect warning at | Unknown/Multiple compile-time | Difficulty: Test Case: | Unknown Blocking: | Blocked By: | Related Tickets: -------------------------------------------------+------------------------- Changes (by tensor5): * failure: None/Unknown => Incorrect warning at compile-time -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970#comment:1> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies -------------------------------------------------+------------------------- Reporter: tensor5 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect warning at | Unknown/Multiple compile-time | Difficulty: Test Case: | Unknown Blocking: | Blocked By: | Related Tickets: -------------------------------------------------+------------------------- Comment (by simonpj): Yes, I think this is a long-outstanding bug, awaiting someone with some time and attention. See #6124 for example. Simon -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies -------------------------------------------------+------------------------- Reporter: tensor5 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect warning at | Unknown/Multiple compile-time | Difficulty: Test Case: | Unknown Blocking: | Blocked By: | Related Tickets: #3927 | #6124 -------------------------------------------------+------------------------- Changes (by jstolarek): * related: => #3927 #6124 -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970#comment:3> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies -------------------------------------------------+------------------------- Reporter: tensor5 | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: duplicate | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect warning at | Unknown/Multiple compile-time | Test Case: Blocked By: | Blocking: Related Tickets: #3927 #6124 | -------------------------------------------------+------------------------- Comment (by George Karachalias <george.karachalias@…>): In [changeset:"8a506104d5b5b71d5640afc69c992e0af40f2213/ghc" 8a506104/ghc]: {{{ #!CommitTicketReference repository="ghc" revision="8a506104d5b5b71d5640afc69c992e0af40f2213" Major Overhaul of Pattern Match Checking (Fixes #595) This patch adresses several problems concerned with exhaustiveness and redundancy checking of pattern matching. The list of improvements includes: * Making the check type-aware (handles GADTs, Type Families, DataKinds, etc.). This fixes #4139, #3927, #8970 and other related tickets. * Making the check laziness-aware. Cases that are overlapped but affect evaluation are issued now with "Patterns have inaccessible right hand side". Additionally, "Patterns are overlapped" is now replaced by "Patterns are redundant". * Improved messages for literals. This addresses tickets #5724, #2204, etc. * Improved reasoning concerning cases where simple and overloaded patterns are matched (See #322). * Substantially improved reasoning for pattern guards. Addresses #3078. * OverloadedLists extension does not break exhaustiveness checking anymore (addresses #9951). Note that in general this cannot be handled but if we know that an argument has type '[a]', we treat it as a list since, the instance of 'IsList' gives the identity for both 'fromList' and 'toList'. If the type is not clear or is not the list type, then the check cannot do much still. I am a bit concerned about OverlappingInstances though, since one may override the '[a]' instance with e.g. an '[Int]' instance that is not the identity. * Improved reasoning for nested pattern matching (partial solution). Now we propagate type and (some) term constraints deeper when checking, so we can detect more inconsistencies. For example, this is needed for #4139. I am still not satisfied with several things but I would like to address at least the following before the next release: Term constraints are too many and not printed for non-exhaustive matches (with the exception of literals). This sometimes results in two identical (in appearance) uncovered warnings. Unless we actually show their difference, I would like to have a single warning. }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970#comment:5> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
#8970: Non-exhaustive pattern match warning with DataKinds and TypeFamilies -------------------------------------+------------------------------------- Reporter: tensor5 | Owner: (none) Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 7.6.3 Resolution: duplicate | Keywords: | PatternMatchWarnings Operating System: Unknown/Multiple | Architecture: Type of failure: Incorrect | Unknown/Multiple warning at compile-time | Test Case: Blocked By: | Blocking: Related Tickets: #3927 #6124 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by simonpj): * keywords: => PatternMatchWarnings -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8970#comment:6> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler
participants (1)
-
GHC