I’m learning about the GHC ViewPatterns language extension at the same time as learning about
Data.Sequence. I like the the ability to pattern-match on sequences a lot. Unfortunately, it looks like the exhaustiveness checker cannot detect when all possible patterns are covered. Here’s an example:
Running this script results in the following compiler warnings:
/path/to/ViewPatternDemo.hs:11:1: warning: [-Wincomplete-patterns] Pattern match(es) are non-exhaustive In an equation for ‘joinShow’: Patterns not matched: _ | 11 | joinShow (viewl -> EmptyL) = "" | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^... -}
I’m going to see if there are known GHC bugs related to this issue.
It turns out that the
PatternSynonyms language extension can do more or less the same thing but with nicer syntax:
I think pattern synonyms are strictly less powerful than view patterns which is why (I think) GHC’s exhaustiveness checker works better with them.
Content © 2023 Richard Cook. All rights reserved.