Something like this would make a great addition to CoffeeScript.
mymap = pattern {
'_, []' : -> []
'f, [x, xs...]' : (f, x, xs) ->
[f x].concat mymap(f, xs)
}
It shares a lot of the same splat/rest/destructuring syntax."... [P]attern matching inspired by static languages is a particularly poor fit for JavaScript (and by extension CoffeeScript), because types are extremely weak in JS." -jashkenas [1]
"[... P]attern matching is not nearly as useful in a language without rich types [...]" - jashkenas [2]
I'm on that reddit thread, respectfully disagreeing with him.
[1]: https://github.com/jashkenas/coffee-script/issues/1419#issue...
[2]: http://www.reddit.com/r/programming/comments/er0qj/coffeescr...