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
Never
in the subtyping rules for existentials. - Synthesize trapping implementations on
Never
for all static and initializer requirements of all protocols as well as a type alias equal toNever
for all associated type requirements on all protocols. - Don't make
Never
a 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.