I've recently started using core.match, which has been quite pleasant and successful; thank you to David Nolen, and all others that have contributed.
The only hiccup I've had has been around how core.match incorporates bindings from local scope into pattern rows. A stupid example demonstrating the (potential) confusion:
=> (match [[:k]]
[[x]] x)
:k
vs.
=> (let [x 12]
(match [[:k]]
[[x]] x))
nil
I was assuming that bindings established by the wildcards in pattern rows shadowed any other local bindings. It took me a while to realize that, e.g. in the example above, `x` was being interpolated into `[[x]]` to yield a pattern row of `[[12]]`. Now that I know that, all's well; but, it took me perhaps longer than it should have to figure it out.
All this is to say, perhaps a relevant note in the (really excellent) overview wiki page[1] might be helpful.
Thanks,
- Chas
[1]
https://github.com/clojure/core.match/wiki/Overview