Re: bikeshed: Typed Aliases

From: Date: Fri, 06 Sep 2024 23:40:21 +0000
Subject: Re: bikeshed: Typed Aliases
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message


On Sat, Sep 7, 2024, at 01:34, Larry Garfield wrote:
> On Fri, Sep 6, 2024, at 6:27 PM, Rob Landers wrote:
> 
> >> I suspect there's also other edge case bits to worry about, particularly if
> >> trying to combine a complex alias with a complex type, which could lead to violating the DNF rule. 
> >> For example:
> >
> > Oh, DNF is the bane of my existence with this RFC—I don't want to mess 
> > this up. I'll see you at the end of the example, though.
> >
> >> 
> >> typealias Foo: (Bar&Baz)|Beep;
> >> 
> >> use (Bar&Baz)|Beep as Foo;
> >> 
> >> function narf(Foo&Stringable $s) {}
> >> 
> >> With the compile time approach, that would expand to
> >> (Bar&Baz)|Beep&Stringable, which is not a valid type def.
> >
> > I can see how you arrived at this, but I think you may have missed a 
> > step, since the entirety of Foo will be &'d with Stringable.
> >
> > Foo = (Bar & Baz) | Beep
> >
> > want: (Foo) & Stringable
> >
> > expand Foo: ((Bar & Baz) | Beep) & Stringable
> >
> > Which can be reduced to the following in proper DNF (at least, it 
> > compiles—https://3v4l.org/0bMlP):
> >
> > (Beep & Stringable) | (Bar & Baz & Stringable)
> >
> > It's probably a good idea to update the RFC explaining how expansion works.
> 
> Woof.  We're not "fixingup" anyone's DNF elsewhere.  I cannot speak for
> everyone, but I'd be perfectly fine not doing any magic fixing for now, and then debating
> separately if we should do it more generally.  Just doing it for aliases doesn't seem like the
> best plan.
> 
> --Larry Garfield
> 

Oh, we're definitely not "fixingup" the expression to DNF... more like spending some
time in the RFC showing how the expansion is the same execution as with a DNF expression to prove
that it is a valid type expression.

— Rob


Thread (25 messages)

« previous php.internals (#125462) next »