Having a type-per-enum-case is really handy.
It also lets you pass a case value across function boundaries without "erasing" it up to its enum type, and it can help with pattern matching.
I wrote up a few thoughts in response to the is case
pitch: Proposal draft for `is case` (pattern-match boolean expressions) - #17 by AlexanderM