dlist icon indicating copy to clipboard operation
dlist copied to clipboard

Incomplete pattern warning when matching both `Nil` and `Cons`

Open flhorizon opened this issue 2 years ago • 1 comments

Hello, I'm getting this warning for a pattern usage like:

foo :: DList a -> IO ()
foo Nil = putStrLn "empty!"
foo (Cons x xs) = print $ x:xs
warning: [-Wincomplete-patterns]
    Pattern match(es) are non-exhaustive
    In an equation for ‘foo’:
        Patterns not matched: _ 

My understanding using pattern synonyms, is that the implementer needs to tell the compiler which pattern set should be considered as complete:

{-# COMPLETE Nil, Cons #-}

Would you accept a PR for that?

flhorizon avatar Nov 09 '22 13:11 flhorizon

Would you accept a PR for that?

Certainly! Thanks for offering!

I just checked briefly to see when it was added to GHC. It seems to appear in the documentation of 8.2.1. It's absent from the 8.2.1 release notes but appears in the 8.2.2 release notes.

I would ideally like a test that demonstrates no incomplete pattern warning (-Wincomplete-patterns) when COMPLETE is used. Perhaps the warning can be turned into an error that would cause compiling to fail. Also, the test should ideally pass for all versions of GHC that support COMPLETE.

spl avatar Nov 10 '22 13:11 spl