Haskell's kind system: a primer
The article is exemplary – it&#x27;s reasonably short, concise, beautifully visualized and explains a complex topic with simple terms.<p>I&#x27;m confused with &quot;type promotion&quot; in the `ConnectionStatus`  example, though. When we promote `Open` and `Closed` from terms to types, we make it easy to create a variable that can be either `Open` or `Closed`, but we&#x27;re also breaking the mental model of the whole thing. `Open`&#x2F;`Closed` is a property – not a &quot;type&quot; in a traditional way of thinking about types. For me, the type should map onto some abstraction in your mental world map, and `Open`&#x2F;`Closed` is definitely not a good fit here.<p>How do Haskell programmers address this problem? Do they think about types more in mathematical terms, rather than as tools for describing mental maps of the problem domain?