Clojure's abstractions written in Clojure