Gotcha, yeah. I think a good way to summarize the design problem is that in order to be a true bottom type Never must be a subtype of all types including existentials of protocols which place requirements on the metatype. The options appear to be:
- Make an exception for
Neverin the subtyping rules for existentials. - Synthesize trapping implementations on
Neverfor all static and initializer requirements of all protocols as well as a type alias equal toNeverfor all associated type requirements on all protocols. - Don't make
Nevera true bottom type.
#1 seems like the least bad option to me right now but there could well be edge cases I haven't thought of. #2 is obviously what I am arguing against. ![]()