Persistent map with Clojure's multimethod dispatch semantics