Collections patterns

forax at forax at
Thu May 19 06:52:39 UTC 2022

> From: "Brian Goetz" <brian.goetz at>
> To: "Remi Forax" <forax at>
> Cc: "amber-spec-experts" <amber-spec-experts at>
> Sent: Wednesday, May 18, 2022 11:08:41 PM
> Subject: Re: Pattern matching: next steps after JEP 405

>> Inference is also something we will need for pattern assignment

>> Box<>(var s) = box;

> Yes, it would work the same in all pattern contexts -- instanceof as well. Every
> pattern context has a match target whose static type is known.

>>> - Array patterns. The semantics of array patterns are a pretty simple extension
>>> to that of record patterns; the rules for exhaustiveness, applicability,
>>> nesting, etc, are a relatively light transformation of the corresponding rules
>>> for record patterns. The only new wrinkle is the ability to say "exactly N
>>> elements" or "N or more elements".
>> I wonder if we should not at least work a little on patterns on collections,
>> just to be sure that the syntax and semantics of the patterns on collections
>> and patterns on arrays are not too dissimilar.

> This is a big new area; collection patterns would have to be co-designed with
> collection literals, and both almost surely depend on some sort of type class
> mechanism if we want to avoid the feature being lame. I don't think its
> realistic to wait this long, nor am I aiming at doing anything that looks like
> a generic array query mechanism. Arrays have a first element, a second element,
> etc; the nesting semantics are very straightforward, and the only real question
> that needs additional support seems to be "match exactly N" or "match first N".
We may want to extract sub-parts of the array / collections by example, and i would prefer to have the same semantics and a similar syntax. 

And i don't think we need type classes here because we can use the target class mechanism instead, like we have done with lambdas, 
instead of Type x -> x + 1 or whatever the exact syntax, we have (Type) x -> x + 1 

We may want [1, 2, 3] to have a type, so it's maybe a little more complicated than just using the target typing but i don't think type classes are needed for collection litterals. 
For operator overloading on numeric value classes, that's another story. 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the amber-spec-experts mailing list