[graf20lyg] | Sebastian Graf, Simon Peyton Jones, Ryan G. Scott, Lower Your Guards: A Compositional Pattern-Match Coverage Checker, Proc. ACM Program. Lang., Vol. 4, (ICFP), August 2020.
|
Abstract
One of a compiler's roles is to 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 interacting language features
when 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.
Download
BibTeX
Authors at the institute