Created by: natefaubion
This PR refines the experimental macroclass feature we released with 0.6.0. The syntax has changed slightly, and auxillary bindings are a bit more robust.
You declare patterns like before, but instead of being rules themselves, patterns contain a rule declaration along with any auxillary with bindings. I renamed where to with to mirror withSyntax. with bindings support syntax quotes with #{} but can also use syntax constructors like makeValue et al. Additionally, patterns with only a rule declaration can be collapsed into a single rule to mirror identity rules.
Here is an example implementation of clojure-like protocols using macroclasses: https://gist.github.com/natefaubion/bd7addb60a888c1ec759