AbstractBidirectional typechecking has become popular in advanced type systems because it works in many situations where inference is undecidable. In this paper, I show how to cleanly handle parametric polymorphism in a bidirectional setting. The key contribution is a bidirectional type system for a subset of ML that supports first-class (higher-rank and even impredicative) polymorphism, and is complete for predicative polymorphism (including ML-style polymorphism and higher-rank polymorphism). The system's power comes from bidirectionality combined with a "greedy" method of finding polymorphic instances inspired by Cardelli's early work on System F<:. This work demonstrates that bidirectionality is a good foundation for traditionally vexing features like first-class polymorphism. |
Reader’s guideThis paper develops an idea noted as future work in my dissertation ("Be greedy", pp. 236-238). (The application to first-class polymorphism was unexpected.)An earlier draft encompasses this work and several related systems with intersection and union types.
|
@InProceedings{Dunfield09:polymorphism,
author = {Jana Dunfield},
title = {Greedy Bidirectional Polymorphism},
booktitle = {ML Workshop (ML '09)},
pages = {15--26},
month = aug,
year = 2009,
note = {\url{http://www.cs.queensu.ca/~jana/papers/poly/}}
}