The Haskell compiler GHC includes a type inference engine for a rather sophisticated type system. You might worry that a complicated type system leads to a very complicated type inference engine. You’d be right, but we have learned a lot about how to structure type inference so that the complexity does not get out of control.

In this talk, given at Zurihac 2019, I explain how GHC’s type inference engine actually works by first generating constraints and then solving them.

Here are