open-closed principle
Adding a new kind should mean adding code, not editing code that already works.
Code is open for extension and closed for modification when new variants arrive as new implementations of an interface; a sealed type with exhaustive switches makes the opposite trade-off.
See also