← HomeLogin
The easiest way to build a type checker
~devprogramming languagestype checking
jimmyhmiller.com Nov 30, 2025Tildes

Summary

Type checkers are a piece of software that feel incredibly simple, yet incredibly complex. Seeing Hindley-Milner written in a logic programming language is almost magical, but it never helped me understand how it was implemented. Nor does actually trying to read anything about Algorithm W or any academic paper explaining a type system. But thanks to David Christiansen, I have discovered a setup for type checking that is so conceptually simple it demystified the whole thing for me. It goes by the name Bidirectional Type Checking.

Also interesting: The appeal of bidirectional type-checking

The fundamental problem that bidirectional type-checking solves well is subtyping.