- Haskell 98 Language and Libraries: The Revised Report
- The Haskell 2010 Report
- Typing Haskell in Haskell (MD version)
- A static semantics for Haskell
- The Glasgow Haskell Compiler: a technical overview
- Type classes in Haskell
- The New GHC/Hugs Runtime System
- System FC As Implemented in GHC (2020)
- The Glasgow Haskell Compiler
- The Implementation of Functional Programming Languages
- Implementing functional languages: a tutorial
- λ to SKI, Semantically
- Calculating Correct Compilers
- Implementing Lazy Functional Languages on Stock Hardware: The Spineless Tagless G-machine
- C-: A Portable Assembly Language
- C–: a portable assembly language that supports garbage collection
- Imperative functional programming
- Pattern Guards and Transformational Patterns
- Type classes: an exploration of the design space
- Lexically scoped type variables
- Type variables in patterns
- Sound and Decidable Type Inference for Functional Dependencies
- Practical type inference for arbitrary-rank types
- Boxy type inference for higher-rank types and impredicativity
- System F with type equality coercions
- Scrap your type applications
- FPH: First-class polymorphism for Haskell
- Types are calling conventions
- Kinds are calling conventions
- Levity polymorphism
- Let Should Not Be Generalised
- OutsideIn(X): Modular type inference with local assumptions
- Generative type abstraction and type-level computation
- Giving Haskell a Promotion
- Equality proofs and deferred type errors
- Typed reflection in Haskell
- Type inference as constraint solving: how GHC’s type inference engine actually works
- A History of Haskell: being lazy with class
- Unboxed values as first class citizens
- A modular fully-lazy lambda lifter in Haskell
- A short cut to deforestation
- Compilation by transformation for non-strict functional languages
- Let-floating: moving bindings to give faster programs
- A transformation-based optimiser for Haskel
- Once Upon a Polymorphic Type
- Non-stop Haskell
- Exploring the Barrier to Entry: Incremental Generational Garbage Collection for Haskell
- Secrets of the Glasgow Haskell Compiler inliner
- Optimistic Evaluation: a fast evaluation strategy for non-strict programs
- How to make a fast curry: push/enter vs eval/apply
- Demand Analysis
- Call-pattern specialisation for Haskell programs
- Faster laziness using dynamic pointer tagging
- Improving supercompilation: tag-bags, rollback, speculation, normalisation, and generalisation
- Theory and practice of demand analysis in Haskell
- Safe, zero-cost coercions for Haskell
- Compiling without continuations
- Making a faster curry with extensional types