You can say you only change the semantics of switch not the semantics of pattern matching, but the idea that you can separate the two is confusing.

From a mathematical point of view, it is quite clear.  We define a `x matches P` relation.  In this relation, `Object o` matches all values of x, including null.

Then, we define the semantics of `instanceof` and `switch`.  For example, `x instanceof P` means: "if x is null, then false, otherwise evaluates to `x matches P`."  The construct gets to decide when to evaluate the pattern.

This is just like how we separate the inference machinery from how inference is used (differently) to produce a result for diamond or var.

What you're saying, I think, is that most users don't separate the layers like this; their understanding of pattern matching is conflated with how pattern contexts like switch/instanceof work. And that is surely true.  But having a clear definition of how pattern matching works, and a clear definition of how switch/instanceof use pattern matching, allows the users who *do* want to understand, to do so more easily, because we've separated the concepts.

PS: the feedback about the fact that it's not clear if a switch allows null or not can also be seen as a symptom of the fact that the notion of total pattern is not obvious for everybody (and having no syntax hint does not help).

I think this is the real issue; leaning on totality is more sound and less ad-hoc, but harder to learn.  You'd like to make that easier to learn by introducing more syntax; I'm saying that this is (a) more complicated in the long run, and (b) way over-rotating towards treatment of null.

Reply via email to