half edge data structure for clojure