> if we don't have constant pattern, it may also means that the type of a bound
> variables can be implicit too.
> i.e. case Point(x, y) having the same meaning as case Point(var x, var y)
> like with lambdas.
I don’t quite get the leap from “no constant patterns” to changing the syntax
of deconstruction patterns, but in any case, we definitely don’t want this (and
in fact, for the same reasons cited in the section on constant patterns, and
others.)
I don’t want people wondering whether `foo(x)` is an invocation of a method or
a pattern. One of the problems with the obvious denotation of constant
patterns is that `foo(0)` looks like an invocation with zero. With a variable,
it is worse.
Further, allowing `Point(x,y)` as a pattern would allow variables to be
declared without anything that even looks like a variable declaration! Many
people are already disturbed by the idea that variables can now be declared
from within expressions; without an `int x` or `var x` to at least have a
declaration to point to, it will be untenable.
> is not valid anymore and should be written like this
> int c = ...
> switch(getFoo()) {
> case Foo(x) where x == c: ...
> }
No, it should be written
case Foo(var x) where x == c: