implementations of common data structures in Clojure