> To start with a practical example, ... Syntactic issues aside, you start with an example that cannot be checked for exhaustiveness and so is pretty much against the idea of `case`.
The reason why pattern matching needs to be built into the language is not convenience (you can get that with a PM macro easily enough even though nobody uses that for macros right now) but safety. Right now Nim's case objects are not safe: type E = enum valA, valB Obj = object case k: E of valA: a: int of valB: b: string proc modify(o: var Obj) = reset(o) o.k = valB o.b = "xx" case x.kind of valA: modify(x) echo x.a of valB: ...