Pattern matching traditionally resembles instantiation except potentially with wildcards, because the “pattern” in “pattern matching” is a object representation template in the same representation used elsewhere in the language.
Using a different syntax for pattern matching loses the main point of pattern matching.
And the counter-point is: you learn one time that it's not instantiation and remember it forever, and you get to resume reusing/overloading muscle-memory syntax to get the job done.
It doesn't bother me since I see that match/case is a whole different context, I know I'm matching, and have no reason to instanciate anything here.
But since Foo(a=1) looks like instanciation, it's obvious to me what it's supposed to match.
I think that's one of the things that motivated to:
- use new keywords, but existing ones like "as", nor symbols;
- force 2 levels of indentation despite the cost of it.
This makes it very clear, with little effort, that the context is completly different.
It will make scanning the code easy, and avoid confusion.