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

Reply via email to