I suppose that another approach would be to have a build-time operation merge subrange types into a master type, which was not normally visible as part of the source. I'm pretty sure that e.g. the Linux kernel does that sort of thing, but whether it's desirable from a readability POV is questionable.
Why would it have to be that complicated?
On the back-end, all that is needed is for each instance of an enumerated type to be expanded when it shows up on the right side of an equation within the type declaration.
type
TSmallEnum = (Mary, Jane, Sue);
TLargeEnum = TSmallEnum + (Bob, Larry, Michael, Sally, Cheryl);
...would be expanded by the compiler as:type
TSmallEnum = (Mary, Jane, Sue);
TLargeEnum = (Mary, Jane, Sue, Bob, Larry, Michael, Sally, Cheryl);
And whatever is used by the compiler to allow subsets, could be used to handle supersets.
It might involve turning it, behind the scenes, into something more equivalent to:
type
TLargeEnum = (Mary, Jane, Sue, Bob, Larry, Michael, Sally, Cheryl);
TSmallEnum = Mary..Sue;
This way, the compiler gets most of what it wants, and the developers gets the benefits he or she wants too.