AbstractA long-standing shortcoming of statically typed functional languages is that type checking does not rule out pattern-matching failures (run-time match exceptions). Refinement types distinguish different values of datatypes; if a program annotated with refinements passes type checking, pattern-matching failures become impossible. Unfortunately, refinement is a monolithic property of a type, exacerbating the difficulty of adding refinement types to nontrivial programs. |
@InProceedings{Jafery17, author = {Khurram A. Jafery and Jana Dunfield}, title = {Sums of Uncertainty: Refinements go gradual}, booktitle = {ACM Symp. Principles of Programming Languages (POPL '17)}, year = {2017}, month = jan, pages = {804--817} }