[External] : Re: User model stacking
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Apr 28 14:02:44 UTC 2022
On 28/04/2022 14:51, Kevin Bourrillion wrote:
>
> If we ride with that horse, it means that in universal generics,
> we should not use T but T.val apart when we want T.val | null that
> can be spelled T.
>
>
> I'm not following, but again I think I'm naively assuming a type
> variable might need to be projected in either direction.
In my opinion, this does represent a change that is "less syntactic"
than it looks.
Saying "T.ref" means "give me the reference projection of T". Reference
projections are defined for both reference classes (String.ref = String)
and for value classes (of course!).
By analogy, saying "T.val" means "give me the value projection of T".
But here we have an issue: while value classes do have value projections
(again, of course!), reference classes do not.
This seems to be at odds with the "for all" semantics of type-variables.
What we need to make "for all" works is a function that gives us the
value projection _if it exists_, or the type unchanged otherwise.
T.valOrT
Naming asides (this is a bikeshed that will be painted later), one thing
stands: this is no longer a "projection", this feels like a more ad-hoc
type mapping (and one which might be a bit hard to explain).
Maurizio
More information about the valhalla-spec-observers
mailing list