Abstract
A compiler should warn if a function defined by pattern matching does not cover its inputs—that is, if there are missing or redundant patterns. Generating such warnings accurately is difficult for modern languages due to the myriad of language features that interact with pattern matching. This is especially true in Haskell, a language with a complicated pattern language that is made even more complex by extensions offered by the Glasgow Haskell Compiler (GHC). Although GHC has spent a significant amount of effort towards improving its pattern-match coverage warnings, there are still several cases where it reports inaccurate warnings. We introduce a coverage checking algorithm called Lower Your Guards, which boils down the complexities of pattern matching into guard trees . While the source language may have many exotic forms of patterns, guard trees only have three different constructs, which vastly simplifies the coverage checking process. Our algorithm is modular, allowing for new forms of source-language patterns to be handled with little changes to the overall structure of the algorithm. We have implemented the algorithm in GHC and demonstrate places where it performs better than GHC’s current coverage checker, both in accuracy and performance.
Highlights
A Compositional Pattern-Match Coverage CheckerA compiler should warn if a function defined by pattern matching does not cover its inputsÐthat is, if there are missing or redundant patterns
Pattern matching is a tremendously useful feature in Haskell and many other programming languages, but it must be used with care
We introduce a coverage checking algorithm called Lower Your Guards, which boils down the complexities of pattern matching into guard trees
Summary
A compiler should warn if a function defined by pattern matching does not cover its inputsÐthat is, if there are missing or redundant patterns. Generating such warnings accurately is difficult for modern languages due to the myriad of language features that interact with pattern matching. This is especially true in Haskell, a language with a complicated pattern language that is made even more complex by extensions offered by the Glasgow Haskell Compiler (GHC). ACM Reference Format: Sebastian Graf, Simon Peyton Jones, and Ryan G.
Talk to us
Join us for a 30 min session where you can share your feedback and ask us any queries you have