# Practical Optional Types for Clojure

**Authors:** Ambrose Bonnaire-Sergeant, Rowan Davies, Sam Tobin-Hochstadt

arXiv: 1812.03571 · 2018-12-11

## TL;DR

Typed Clojure introduces an optional static type system for Clojure, enhancing code correctness and safety while supporting common idioms and Java interoperability, with formal guarantees and real-world adoption.

## Contribution

It extends Typed Racket's occurrence typing to Clojure, incorporating features for multimethods, Java interop, and heterogeneous dictionaries, with formal soundness proof.

## Key findings

- Formal model and soundness proof of Typed Clojure's type system.
- Widespread adoption in industry and open-source projects.
- Quantitative analysis of type feature usage in large codebases.

## Abstract

Typed Clojure is an optional type system for Clojure, a dynamic language in the Lisp family that targets the JVM. Typed Clojure enables Clojure programmers to gain greater confidence in the correctness of their code via static type checking while remaining in the Clojure world, and has acquired significant adoption in the Clojure community. Typed Clojure repurposes Typed Racket's occurrence typing, an approach to statically reasoning about predicate tests, and also includes several new type system features to handle existing Clojure idioms. In this paper, we describe Typed Clojure and present these type system extensions, focusing on three features widely used in Clojure. First, multimethods provide extensible operations, and their Clojure semantics turns out to have a surprising synergy with the underlying occurrence typing framework. Second, Java interoperability is central to Clojure's mission but introduces challenges such as ubiquitous null; Typed Clojure handles Java interoperability while ensuring the absence of null-pointer exceptions in typed programs. Third, Clojure programmers idiomatically use immutable dictionaries for data structures; Typed Clojure handles this with multiple forms of heterogeneous dictionary types. We provide a formal model of the Typed Clojure type system incorporating these and other features, with a proof of soundness. Additionally, Typed Clojure is now in use by numerous corporations and developers working with Clojure, and we present a quantitative analysis on the use of type system features in two substantial code bases.

## Full text

_Full body text omitted from this summary view._ Fetch the complete paper as Markdown: https://tomesphere.com/paper/1812.03571/full.md

## Figures

43 figures with captions in the complete paper: https://tomesphere.com/paper/1812.03571/full.md

## References

26 references — full list in the complete paper: https://tomesphere.com/paper/1812.03571/full.md

---
Source: https://tomesphere.com/paper/1812.03571