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

Jack Williams, J. Garrett Morris, Philip Wadler

Research output: Contribution to journalArticlepeer-review

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.
Original languageEnglish
Article number134
Pages (from-to)134:1-134:29
Number of pages29
JournalProceedings of the ACM on Programming Languages
Volume2
Issue numberOOPSLA
Early online date24 Oct 2018
DOIs
Publication statusPublished - Nov 2018

Fingerprint

Dive into the research topics of 'The root cause of blame: contracts for intersection and union types'. Together they form a unique fingerprint.

Cite this