Ticket #6124 (new bug)

Opened 12 months ago

Last modified 7 months ago

Spurious non-exhaustive warning with GADT and newtypes

Reported by: joeyadams Owned by:
Priority: normal Milestone: 7.8.1
Component: Compiler (Type checker) Version: 7.4.1
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Incorrect warning at compile-time Difficulty: Unknown
Test Case: Blocked By:
Blocking: Related Tickets:

Description

This may be related to #3927 or similar, but here's another case where the compiler produces a "Pattern match(es) are non-exhaustive" warning for patterns on a GADT that are impossible to implement:

newtype A = MkA Int
newtype B = MkB Char

data T a where
    A :: T A
    B :: T B

f :: T A -> A
f A = undefined

This produces the following warning:

    Warning: Pattern match(es) are non-exhaustive
             In an equation for `f': Patterns not matched: B

It is impossible to write a pattern for B because B :: T B does not match T A.

If I replace newtype with data for both A and B, the warning goes away. If I replace only one instance of either newtype, it will still produce the warning.

Change History

Changed 12 months ago by simonpj

  • difficulty set to Unknown

Thanks. I'm afriad this is part of a collection of pattern-match-exhaustiveness-checking tickets: #595, #5728, #3927, #5724, #5762, #4139. I think it's precisely #3927 but have not checked carefully.

This whole area needs love, but it's not trivial or I'd have done it by now!

Simon

Changed 7 months ago by igloo

  • milestone set to 7.8.1
Note: See TracTickets for help on using tickets.