> On Apr 26, 2019, at 7:44 AM, Brian Goetz <[email protected]> wrote: > > There is already a _null type_, and we’ve defined it so that for every > reference type R, Null <: R (JLS 4.10.). In order to make inference work for > nullable values, we need to state that for a zero-default value type V: > > Null <! V > Null <: V? > > and that LUB(V, Null) = V? > > When we gather constraints in 18.1, in addition to adding the upper bound on > alpha, we also add in lower bounds Null <: alpha_i for erased type vars. > > We adjust 18.4 to not consider Null to be a proper lower bound for purposes > of resolution.
I agree with the spirit of this, but I've actually been meaning for awhile to push on getting rid of the null type, which is barely a type (like needing special treatment in 18.4). The goal would be to treat 'null' as a poly expression instead. That aside, yes, we'll need a way to identify which inference vars are constrained to be nullable (and maybe which are constrained to be non-nullable?). If it's not with a type, we can do it with a special-purpose bound and corresponding resolution rules.
