heterogeneous structs for clojure