On Sat, Jun 22, 2024, at 12:14 PM, Brandon Jackson wrote: >> To clarify here, these all come as a set. Array shapes aren't their own >> "thing", they just fall out naturally from array patterns. So it's not >> possible for associative patterns to conflict with array shapes, as they are >> literally the same thing. :-) I'd have to check with Ilija but I don't >> believe there's much internal difference between list and associative >> patterns. This one isn't on the ADT hot path, so it could be postponed >> >> I see no way for associative array patterns/shapes to conflict with generics >> at all. > > Thanks for the clarification. I was looking at the example given in > the overview trying to figure out the boundaries between array > structure patterns, array shape patterns, and nested patterns. It > sounds like it can be summarized to nested patterns with the option to > add or omit `...` determining if unexpected key/values are allowed. > Also again, just throwing out hypothetical curve balls that could > delay or halt other good parts. At this point I don't actually expect > generics to ever be a thing.
To clarify a bit more: There's really only two slight variations on the same pattern for arrays, list and associative. In both cases, each specified element of the array is matched against its own sub-pattern, recursively. That sub-pattern may be (almost) any other pattern. So this: $arr is ['a' => 'A', 'b' => 'B', 'c' => [int, int, int], 'd' => string] Is entirely valid, and decomposes to: $arr['a'] is 'A' && $arr['b'] is 'B' && $arr['c'][0] is int && $arr['c'][1] is int && $arr['c'][1] is int && $arr['d'] is string (This is why literal patterns are basically non-negotiable. On their own, they're kinda pointless. As a sub-pattern of another pattern, they're mandatory.) Array shapes aren't really a feature per se; they're just a natural fall-out of the recursive syntax. --Larry Garfield