What I mean is, there is no non-bottom value that you can assign to this type member when it’s declared with default bounds and not refined further, without using .asInstanceOf
. I do think I can call that “uninhabited”, but maybe I’m wrong.
Now, when the lower-bound is raised, there now appear values that can be assigned the type of the type member without casting.
You do not contradict me, what you say is that an “abstract type member” is not abstract
in the same sense that a method signature is abstract i.e. not incomplete or uninstantiable, which is exactly what I was trying to convey. “abstract” for type member is not the same “abstract” as in “abstract class” or “abstract method”, that’s why an object can contain an “abstract type member”, but can’t contain an “abstract method signature”.
This is not the first time I see this confusion, many people think that a abstract type member declaration is an “interface” and overriding it with a type alias is an “implementation” – so every abstract type member has to be followed by an alias override. This is a wrong intuition, type members don’t have a “declaration”/“interface”/“abstract” state, they’re always complete types