Waterfall Model of Types

This is my waterfall model of types, for thinking about compilers and programming language design. It is clearly biased towards Haskell but useful more generally, I think. A lot of compilers may only include a few stages from this model; none of them include stage 0. Waterfall Stage 0 is what the user intends for the types to express. This is a problem because there is no way to convey this. But…