É possível sobrecarregar multi-métodos do Clojure em arity?

Eu tenho um código que usa multi-métodos e idealmente gostaria de sobrecarregar a função (neste caso, multi-função) para que eu possa passar em uma função de ordem superior para ajudar no teste, por exemplo.

Aqui está o exemplo:

<code>(ns multi)

(defn my-print [m] (println "The colour is" (:colour m)))

(defmulti which-colour-mm (fn [m f] (:colour m)))

(defmethod which-colour-mm :blue [m f] (f m))
(defmethod which-colour-mm :red [m f] (f m))
(defmethod which-colour-mm :default [m f] (println "Default: Neither Blue nor Red"))

(defn which-colour
  ([m] (which-colour-mm m my-print))
  ([m f] (which-colour-mm m f)))

(which-colour {:colour :blue :object :ball})
(which-colour {:colour :yellow :object :ball})
(which-colour {:colour :blue :animal :parrot} (fn [m] (println "The " (:animal m) "is" (:colour m))))
</code>

Então, minha defn fornece a sobrecarga de aridade, mas estou me perguntando se defmethod suporta algo como isto. (Eu acho que você não gostaria de fazer isso para cada declaração de defmethod.)

É este o mais adequado (ouso dizer,idiomático) abordagem, ou existe uma maneira melhor?

questionAnswers(3)

yourAnswerToTheQuestion