Experimenting with multiple dispatch in clojure