An open API service indexing awesome lists of open source software.

https://github.com/sdiehl/typechecker-zoo

A menagerie of cute implementations of modern typechecking algorithms
https://github.com/sdiehl/typechecker-zoo

compiler dependent-types type-inference type-system type-theory

Last synced: 19 days ago
JSON representation

A menagerie of cute implementations of modern typechecking algorithms

Awesome Lists containing this project

README

          

# Typechecker Zoo

A cute collection of type checker implementations demonstrating modern type checking algorithms from the last fifty years of programming language design.

[![CI](https://github.com/sdiehl/typechecker-zoo/actions/workflows/ci.yml/badge.svg)](https://github.com/sdiehl/typechecker-zoo/actions/workflows/ci.yml)

| | |
|:---:|:---:|
| [
**Algorithm W**](./algorithm-w/src) | [
**System F**](./system-f/src) |
| [
**System F-ω**](./system-f-omega/src) | [
**Calculus of Constructions**](./coc/src) |

### Algorithm W

Robin Milner's classic Hindley-Milner type inference algorithm from *A Theory of Type Polymorphism in Programming*.

### System F

Second-order lambda calculus with parametric polymorphism using bidirectional type checking.

An implementation of bidirectional algorithm from *Complete and Easy Bidirectional Typechecking for Higher-rank Polymorphism*.

### System F-ω

Complete implementation of System F-ω with higher-kinded types, DK bidirectional type checking, existential type variables, polymorphic constructor applications, pattern matching, and lambda expressions with type inference.

Uses the method of *A Mechanical Formalization of Higher-Ranked Polymorphic Type Inference*.

### Calculus of Constructions

The Calculus of Constructions with a hierarchy of non-cumulative universes, inductive types and universe polymorphism. Limited support for higher-order unification.

Uses a bidirectional dependent typechecker outlined in *A universe polymorphic type system* by Vladimir Voevodsky.

## Build Instructions

### Prerequisites

* [Rust (latest stable)](https://www.rust-lang.org/tools/install)
* [Just build system](https://just.systems/man/en):
- `cargo install just`
- `brew install just`

### Commands

```bash
just build # Build all projects
just test # Run all tests
```

## Tutorial

The tutorial is built with `mdBook` and `mdbook-include-rs` preprocessor.

```bash
just install-docs # Install mdbook and dependencies
just build-docs # Build documentation
just serve-docs # Serve with live reload
```

## Contributing

If you want to contribute, please fork the repository and submit a pull request.

```shell
# Clone the repository
git clone https://github.com/sdiehl/typechecker-zoo.git
cd typechecker-zoo/docs

# Install mdBook and the include preprocessor
cargo install --git https://github.com/sdiehl/mdbook-include-rs.git

# Start the mdBook preview
just serve-docs

# Make your edits to markdown files in src/
```

Then open a pull request on Github. Any contributions are welcome, especially
typo fixes and improvements. 🙏

## License

MIT Licensed. Copyright 2025 Stephen Diehl.