The biggest issue I see is the usage of `enum` now makes it so any code that
expects a `enum` typeclass has to delimit three different types of `enum`
(OrdinalEnum, HoleyEnum, and SumEnum). Consider `parseEnum` it's constrained to
the typeclass but obviously will only work on the numeric enums(Even your
examples use a generic constraint that would not make sense for numeric enums).
I would argue to use `object` as it does not conflate an ordinal type to a
record type, a builtin typeclass then could be made named `SumObject` for this
specific construct.