This isn't quite as powerful as full blown pattern matching (which in turn isn't quite as powerful as full blown unification) because you can't branch logic based on whether a pattern matches or not.
Can you elaborate on what "unification" is in this context? The only language that I've used with full-blown pattern matching is Rust, and I'm curious to know what the next step up the ladder is.