Logo image
The root cause of blame: contracts for intersection and union types
Journal article   Open access

The root cause of blame: contracts for intersection and union types

Jack Williams, J. Garrett Morris and Philip Wadler
Proceedings of ACM on programming languages, Vol.2(OOPSLA), pp.1-29
10/24/2018
DOI: 10.1145/3276504
url
https://doi.org/10.1145/3276504View
Published (Version of record) Open Access

Abstract

Gradual typing has emerged as the tonic for programmers with a thirst for a blend of static and dynamic typing. Contracts provide a lightweight form of gradual typing as they can be implemented as a library, rather than requiring a gradual type system. Intersection and union types are well suited to static and dynamic languages: intersection encodes overloaded functions; union encodes uncertain data arising from branching code. We extend the untyped lambda calculus with contracts for monitoring higher-order intersection and union types, for the first time giving a uniform treatment to both. Each operator requires a single reduction rule that does not depend on the constituent types or the context of the operator. We present a new method for defining contract satisfaction based on blame behaviour. A value positively satisfies a type if applying a contract of that type can never elicit positive blame. A continuation negatively satisfies a type if applying a contract of that type can never elicit negative blame. We supplement our definition of satisfaction with a series of monitoring properties that satisfying values and continuations should have.

Details

Metrics

Logo image