
#13964: Pattern-match warnings for datatypes with COMPLETE sets break abstraction -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.2.1-rc2 Resolution: | Keywords: | PatternSynonyms, | PatternMatchWarnings Operating System: Unknown/Multiple | Architecture: Type of failure: Poor/confusing | Unknown/Multiple error message | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by mpickering): This is nothing unique to `COMPLETE` pragmas, the exhaustiveness checker already breaks abstraction in this way. For example: {{{ module T (D(A)) where data D = A | B }}} {{{ module M where import T foo A = () }}} warns with {{{ M.hs:5:1: warning: [-Wincomplete-patterns] Pattern match(es) are non-exhaustive In an equation for ‘foo’: Patterns not matched: T.B | 5 | foo A = () | }}} and after all, to retain safety it has to. A function exported by `T` could mention `B` and then be used in `M`. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13964#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler