Stephen A. Edwards Columbia University Crown
COMS 6998 007
Types, Languages and Compilers
Spring 2023

General Information

Class meets Mondays, 4:10 - 6:40 PM in 451 CSB.


Name Email Office hours Location
Prof. Stephen A. Edwards By appt. Online
Wei Qiang W 4-5 Th 3-4 1st Floor Mudd TA Area
Emily Sillars F 12-2 1st Floor Mudd TA Area


An advanced course on modern programming language and type theory with a focus on functional languages and concrete implementations. The goal is to become fluent in the concepts and formalisms typical of papers in conferences such as POPL.

Prerequisites: COMS 4115 Programming Languages and Translators; COMS 3203 Discrete Mathematics; COMS 3261 Computer Science Theory. Equivalents acceptable.


Date Lecture Notes Due
Mon Jan 23 Introduction
Inductive Definitions
Mon Jan 30 Regular Expressions
Mon Feb 6 "

Mon Feb 13 Context Free Grammars
Mon Feb 20 The Lambda Calculus
Mon Feb 27 "

Sun Mar 5 HW 1 pdf
Mon Mar 6 "

Mar 13-17 Spring Break
Mon Mar 20 Simply Typed Lambda Calculus
Mon Mar 27 The Hindley-Milner Type System
Sun Apr 2 HW 2 pdf lambda.tar.gzlambda.tar.gz
Mon Apr 3 "

Sun Apr 9 Project Proposal
Mon Apr 10 System F
Mon Apr 17 Expressiveness (guest lecture)

Mon Apr 24 Dependent Type Systems
Mon May 1 Curry-Howard Correspondence
May 11 Final Project Presentations

The Project

You'll perform a design-it-yourself project in the second half of the class.


DTL: Dependently Typed Language (WQ)
pdfProposal pdfReport ArchiveFiles
Raphael Sofaer and Yiwei Wu
Haskelterpreters: Definitional Interpreters for Haskell (JH)
pdfProposal pdfReport ArchiveFiles
Xurxo Riesco Perez
JambaJuice: Modular Type Inference Prototype (SE)
pdfProposal pdfReport ArchiveFiles
Eric Feng and Emily Sillars
JustYourRegularBRzOs1: Regexp matcher using Brzowski derivatives (ES)
pdfProposal pdfReport ArchiveFiles
Jonathan Cappell
JustYourRegularBRzOs2: Regexp matcher using Brzowski derivatives (ES)
pdfProposal ArchiveFiles
Arman Jindal
OhMyGADT: Language with General Abstract Data Types (ES)
Alexis Gadonneix and Nikhil Mehta

Yiming Fang and Jose Ramos
RustLifetimes: Rust Lifetime Analyzer (JH)
pdfProposal pdfReport
Vikram Nitin
Session: Session Types (JH)
pdfProposal pdfReport ArchiveFiles
Andrei Coman and Christopher Yoon
Slyce: Dependent Type Interpreter (WQ)
pdfProposal pdfReport ArchiveFiles
Raven Rothkopf and Gregory Schare
blueberry: (SE)
Wei Qiang
ducksrow: Duck Typing (ES)
pdfProposal pdfReport UNRECOGNIZED FILETYPEFiles
Chang Amery

star My favorites


Recommended Texts

Robert Harper.
Practical Foundations for Programming Languages.
2nd ed. Cambridge University Press, 2016.

Harper is closest in scope to the class, but we will not follow it slavishly. In particular, it has a lot of detail that will not be discussed.

Cover of Practical Foundations for Programming Languages

Benjamin C. Pierce.
Types and Programming Languages.
MIT Press, 2002.

Pierce is also an excellent reference for this course. As its name suggests, it focuses almost exclusively on types. Unlike Harper, it has extensive discussions of how to implement the discussed ideas in code.

Cover of Types and Programming Languages

Shriram Krishnamurthi.
Programming Languages: Application and Interpretation.
2nd ed. Self-Published, 2017.

Krishnamurthi uses Racket and is heavy on implementation details. It has some discussion of types and dynamic checking through contracts, but is closer to a compiler implementation text than the others listed here.

Cover of Programming Languages: Application and Interpretation

Glynn Winskel
The Formal Semantics of Programming Languages: An Introduction.
MIT Press, 1993.

Winskel is an older book that focuses, unsurprisingly, on programming language semantics (operational, denotational, and axiomatic), but also discusses types and the Lambda Calculus.

Cover of The Formal Semantics of Programming Languages


Class Policies

Valid HTML 4.01Valid CSS