Pattern Matching

With the recent release of C# 7, I've been looking into how a few languages to their "pattern matching". It is a bit disappointing that a few languages who claim to do pattern matching are only doing conditional statements with an implicit case and variable binding in one line.

Kotlin and C# 7 do this and it isn't real pattern matching. However, they will gladly turn the words into buzzwords.

What is really missing is the ability to deconstruct types, and specifically the ability to deconstruct recursive types. It is very useful to be able to describe lists this way. Such as defining the first of a list in prolog: first(H,[H|_]) .

Many languages have true pattern matching, such as ML, Haskell, Scala, Prolog, and more. Even Rust has real pattern matching.