On 27/07/2022 23:25, Dan Smith wrote:
I'm not*totally*  sure I grasp all the differences, but here are a couple of 
observations that seem to support Model 2:

I'm not sure I grasp the differences between model 1 and 2 either.

But if by Model 1 you simply mean that a type-variable is a place holder that the compiler knows nothing about, then I believe that model to be not an accurate description of what happens.

For instance, a type variable still as _members_ and, because of that, it _has_ to be a type (at least in JLS-land). Note that, even in System-F, type-variables have _bounds_, so they are not mere placeholders and you can reason about (some of) their properties.

That said, a type-variable, even today, does not expose all the properties of regular types. For instance, members of type-variables are defined in a different ways (e.g. by filtering out public members), and a type-variable cannot be the target of a cast (module warnings), or an instance test (modulo errors) expression.

In the same way, universal type-variables cannot answer the question of "are you a ref or a val" (in the same way in which today's type variable cannot answer the question of: are you an Integer or a Double).

Maurizio



Reply via email to