Macro protocols for clojure