I think the problem here is that this type-alias approach is forcing a bad dilemma on libraries who want to adopt it:
-
If you keep the class name the same and add an typealias with a new name, you keep binary compatibility but break source compatibility: now all downstream code has to change to use the typealias instead of the original class name to work
-
If you change the class name but add a typealias with the old class name, you break both binary compatibility and source compatibility: now all downstream code previously compiled against the old class name will stop working unless recompiled, and although method signatures won’t need to be changed, any calls to
new MyCls
orextends MyCls
will be broken as well.
“forcing all libraries using implicit conversions to change and break all downstream code that will all need to be updated and/or recompiled” is simply not an acceptable migration plan. So we need to allow into
as a modifier on existing types, traits, and classes, and given there isn’t any fundamental reason not to have it, that seems like the right way out of this dilemma