It seems like a messy abstraction whose results could be achieved through a variety of other tools. :/
It isn't messy in Clojure
It isn't messy in Clojure