/prevent-impossible-states-with-union-types/
https://jhroemer.github.io/posts/prevent-impossible-states-with-union-types