- Notions of Computations over Monads
- Computational Lambda Calculus and Monads
- Monads for functional programming
- The essence of functional programming
- Semantics
- How to make ad hoc polymorphism less ad hoc
- Type Classes
- Lazy State Threads
- General State
- The Spineless Tagless G-machine
- An Exploration of the Design space of Type Classes
- Functional Dependencies
- Rank-n Types
- Typing Haskell in Haskell
- Type Families
- Type Families pt. 2
- GADTs
- First Class Modules in Haskell
- Kind Promotion
- Stream Fusion. From Lists to Streams to Nothing at All
- Lambda Calculus with Types
- The Call by Need Lambda Calculus
- The Lazy Lambda Calculus
- Hindley-Milner Systems
- Generalized Hindley-Milner Systems
- System F with type equality coercion
- System FC with Kind Equality
- Theorems for Free
- Free theorems for TyCons
- Parametric Polymorphism
- Type Derivatives and Typed Holes
- Suggesting Valid Hole Fits
- Parametric HOAS
- Tutorial on Bidirectional Type Inference
- Tutorial Implementation of Dependent Types
- Pfenning's Notes on Bidirectional Type Inference
- EdK's
bound
Library Comparisons - Bidirectional Typechecking for Higher Rank Polymorphism
- Tutorial Implementation of Hindley-Milner
- De Bruijn Indices
- The Stitch Type Checker
- Boxes go Bananas