A couple of other things to consider: 1. C-style array declaration is not allowed in patterns.
Wish we could phase out C-style array decls entirely...
2. For local variable declaration, the initializer can omit `new int[]` part: int data[] = {1, 2, 3}
Good catch. For some reason I was thinking this was only for fields, but it works for locals too. There's a future story about collection literals, but it is unlikely we'll be able to retcon exactly this syntax. (#include "bikeshed-deterrent.h")
We may be able to address this by including a conversion from an array initializer to the target type of a pattern in an unconditional pattern assignment context.
3. Local variable type may affect the initializer type (e.g. List<String> list = List.of()). What about patterns? Can we say that a `List<String> list` pattern is a total pattern over `List.of()` expression type?
Yes, patterns have a notion of a target type, which is the type they have declared as their matchee. For a type pattern `T t`, that target type is T. We already evaluate whether the pattern is applicable to the matchee using this type.