Affiliation:
1. KIT, Germany
2. Microsoft Research, UK
3. Indiana University, USA
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.
Publisher
Association for Computing Machinery (ACM)
Subject
Safety, Risk, Reliability and Quality,Software
Cited by
6 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献
1. Live Pattern Matching with Typed Holes;Proceedings of the ACM on Programming Languages;2023-04-06
2. Linked visualisations via Galois dependencies;Proceedings of the ACM on Programming Languages;2022-01-12
3. Compiling pattern matching to in-place modifications;Proceedings of the 20th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences;2021-10-17
4. Haskell⁻¹: automatic function inversion in Haskell;Proceedings of the 14th ACM SIGPLAN International Symposium on Haskell;2021-08-18
5. Intensional datatype refinement: with application to scalable verification of pattern-match safety;Proceedings of the ACM on Programming Languages;2021-01-04