In the "type level sets" proposal you would get i8 | u8
type, so I don't see a problem here. Yes, match
ing on T | u8
with T = i8 | u8
would result in overlapping arms, but overlapping match arms is a well-understood possibility, so I don't think it's a problem.
Personally I am against enum impl
syntax. I believe anonymous enum is an implementation detail and should not be exposed as part of signature. Instead I think we should do conversion at the return site, e.g. by using the become
keyword.