On Tue, Jul 20, 2021, 20:35 Niklas Keller <m...@kelunik.com> wrote: > > > > > > > nicolas-grekas wrote on the PR: > > > > > > ?X&Y cannot be confused with > > > > > > > > > > It confused me. A compiler might understand it, but as a human I > have > > > > > trouble understanding it. > > > > I think ?X&Y would be a pretty poor syntax choice, as it's ambiguous as > many others said: (X|null)&(Y) vs. (X&Y)|null. > > What hasn't been proposed, yet, is ?X&?Y, so requiring either all or none > of the types being nullable. > > Best, > Niklas >
>From the look of the syntax I would prefer it not to land on 8.1 at all, which gives us another year to think of any syntax less aggressive to the eyes. One of the things I loved about the Pure Intersection RFC was that it avoided the discussion around parenthesis on type declaration altogether. Maybe if a type alias is proposed before mingling Union and Intersection, then it's less of an aggressive syntax. Type T = (X&Y)|Z|null I don't know if anyone has offered this before, but if making an exception for nullable Intersection is on the table, what about putting the null sign at the end? X&Y&Z? It doesn't seem ambiguous because PHP defines ?X as nullable X. It doesn't seem obvious what the ? is doing at the end but at least it doesn't seem ambiguous. >