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
- Host: GitHub
- URL: https://github.com/sdiehl/typechecker-zoo
- Owner: sdiehl
- License: mit
- Created: 2025-08-15T11:02:13.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2025-09-09T05:20:46.000Z (29 days ago)
- Last Synced: 2025-09-09T08:20:37.291Z (28 days ago)
- Topics: compiler, dependent-types, type-inference, type-system, type-theory
- Language: Rust
- Homepage: https://sdiehl.github.io/typechecker-zoo/
- Size: 22.6 MB
- Stars: 301
- Watchers: 2
- Forks: 9
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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.
[](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.