Please, I know I messed up the terminology earlier, but do try to get it straight. The type level set you're talking about is a union type, not a sum type.
I do apologise for any confusion but it's an unfortunate reality of two meaningfully distinct but very similar features being proposed and being pitted against each other.
It's at this point I have to ask readers to try to separate @newpavlov's union type from the main proposal here, which is anonymous enums, which is a sum type. I personally believe that a union type (beyond making dyn Any better to work with) does not carry its weight for Rust, but an anonymous enum could for the same reason we have anonymous structs (tuples).
But to be frank: I think the potential confusion of people using a feature expecting one and getting the other (between sum types and union types) makes the addition of either (or both!) require a higher standard that I don't think is possible to meet.
And please, a union type is not an anonymous enum. An enum is a sum type, not a union type, though a sum type is a "tagged" union type.
Especially if it's based on TypeId, @newpavlov, what you're describing is "enum impl Any", not an anonymous enum.
A quick bit of type theory to explain the Algebraic Data Type terminology:
A "type" is a set of possible values that an instance of that type could be. For example, the type u8 is the set of potential values {0, 1, 2, ..., 255}.
A "product type" is what you get by taking the product of two sets. If you multiply u8 by u8, you get the tuple type (u8, u8), which is the set of values {(0,0), (0,1), ... (1,0), (1,1), ..., ..., (255,255)}. Note that if there are N potential values in the first set and M in the second set, the number of values in the resulting set is the product, N×M.
Sum types and union types break the perfect mathematical analogy and take a little bit of adapting to work.
A "sum type" is what you get by taking the "sum" of two sets to get a set of size N+M. Depending on who you ask, you can't actually "add" sets together, because an item can't be in a set twice. Some will tell you that you can add two sets, but only if they're nonoverlapping. To get two nonoverlapping sets, we tag each value from each set with which set it came from, and then take the union of the sets. So if we take the sum of u8 and u8, we get {Left 0, Left 1, ..., Left 255, Right 0, Right 1, ..., Right 255}.
A "union type" is what you get by taking the regular union of two sets. If you union i8 with u8, you get the potential set of values {-128, -127, ..., 255}. Of course, it's not as clean as that, as 0i8 is actually a different value from 0u8, so we find the unioned type set is actually {-128i8, -127i8, ..., 127i8, 0u8, 1u8, ..., 255u8}. In the case where two values of the same type are present in the set of possible values, they are collapsed to the one set member per normal set behavior. IOW, the union of u8 and u8 is just u8 again.