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".




     - *Primitive patterns. *This is driven by another existing
    asymmetry; we can use conversions (boxing, widening) when
    constructing records, but not when deconstructing them.  There is
    a straightforward (and in hindsight, obvious) interpretation for
    primitive patterns that is derived entirely from existing cast
conversion rules.

When calling a method / constructing an object, you can have several overloads so you need conversions, those conversions are known at compile time. (Note that Java has overloads mostly because there is a rift between primitives and objects, if there was a common supertype, i'm not sure overloads will have carried their own weights.)

When doing pattern matching, there is no overloads otherwise you will have to decide which conversions to do at runtime.

There are no overloads YET, because the only deconstruction patterns are in records, and records have only one state description.  But that is a short-lived state of affairs.  When we do declared deconstruction patterns, we will need overload selection, and it will surely need to dualize the existing three-phase overload selection for constructors (e.g., loose, string, and varargs invocation contexts.)

Reply via email to