This post is about the evolution of Futhark’s type checker, motivated by a large refactoring I am about to merge. It is probably mostly of interest to other language designers, and contains some lessons I wish I had known when we first got started – although I am not particularly well-read in the type checking literature, so it’s possible all of this is old hat.