We extend our lambda calculus interpreter with a type system, discover that almost nothing from the untyped standard library survives, derive PCF from first principles, and arrive somewhere unexpected: the typechecker we wrote is also a proof checker - Curry-Howard isomorphism.
Toby Jordan
Self-Taught Programmer and Philosophy & RS Graduate
I am a self-taught programmer and recently graduated with a degree in Philosophy and Religious Studies from the University of Manchester, UK. I have always been passionate about computers, and started programming at 10 years-old.
I am proficient in Typescript, Python, and Odin. I have built full-stack type-safe web applications in Typescript using a modern tech stack including SvelteKit and Svelte 5, as well as low-level applications in Odin. See below for examples of my work.
At the moment, I am exploring Lambda Calculus and Type Theory in a series of blog posts. The first post walks through my implementation of a lambda calculus interpreter in Odin. The second post implements STLC and PCF, and discusses the Curry-Howard correspondence. In the third and final post, coming soon, I discuss the Lambda Cube and implement the Hindley-Milner type system.
My philosophy background shapes how I think about software: I am drawn to complex and foundational problems: type systems, language design, etc.
I am currently seeking a junior/intern software engineering role. Based in the UK; open to remote.
Projects
What I’ve been working on recently
Lemuria A social platform built around two-sided friendships, shelves, and topic-based boards. Inspired by Letterboxd and early Facebook. Built with Bun, Typescript, Hono, Drizzle, Svelte 5 and SvelteKit.
Camel.py A reactive SPA framework for Python. Camel compiles a Python UI description to a typed intermediate representation, then interprets it with a small vanilla JS runtime.
Kaworu Linux A minimal NixOS rice (configuration) built around Hyprland, Home Manager and Stylix. Declarative, reproducible, and opinionated: the entire system - window manager, terminal, editor, theme - is defined in a single flake.
Blog
Writings on technology, philosophy, and their intersection
Types as Propositions, Proofs as Programs: Implementing STLC and PCF Building a Lambda Calculus Interpreter in Odin Lambda calculus has three rules, and yet booleans, arithmetic, linked lists, and recursion fall out of them. This is an account of building an interpreter for it in Odin - and of the theory that ambushes you along the way.
Why I Choose Odin over Rust or C I needed a systems language, so I tried Rust, Zig, C, Nim, and Odin. This is the case for Odin - and what Scheme taught me about what it means for a language to know what it is.
- See all...