General Type Projection

Today in Dotty News: discussion has finally started on deprecating and removing generalized Type Projection.

The tl;dr is that Scala 2 allows you to say T#a, where T is any type, to mean “the member a of whatever T happens to be”. The proposal is to drop this in the case where T is abstract. As I understand it, this will still be valid syntax, but only for concrete types.

In a sense, this isn’t actually news — the folks doing DOT realized years ago that this particular corner of Scala isn’t sound in the theoretical sense, and it’s always been a bit fragile in Scala 2. (I suspect these facts are not unrelated.) And Dotty dealt with this quite a while ago.

But as Dotty begins to turn into Scala 3, its design elements are starting to turn into formal SIPs, and it’s time for this one to be examined. So if you have any thoughts on it, or are simply curious, I recommend checking out the link above.