spl / dlist

Difference lists in Haskell
https://hackage.haskell.org/package/dlist
BSD 3-Clause "New" or "Revised" License
65 stars 15 forks source link

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

Open flhorizon opened 2 years ago

flhorizon commented 2 years ago

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?

spl commented 2 years ago

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.