title: defmethod catch all
body: <p>I have a multimethod that specializes on two parameters:</p>
  
  <pre><code>(defmulti get-tag-type (fn [type tag] [type tag]))
  </code></pre>
  
  <p>Having the type allows me to group the different defmethod calls into sets:</p>
  
  <pre><code>(defmethod get-tag-type [::cat 0] [type tag] ::tiger)
  (defmethod get-tag-type [::cat 1] [type tag] ::lion)
  (defmethod get-tag-type [::cat 2] [type tag] ::jaguar)
  
  (defmethod get-tag-type [::dog 0] [type tag] ::poodle)
  (defmethod get-tag-type [::dog 1] [type tag] ::australian-shepherd)
  (defmethod get-tag-type [::dog 2] [type tag] ::labrador-retriever)
  </code></pre>
  
  <p>However, sometimes, I want a catch all or default for one of the groups, which would be called if none of the others matched:</p>
  
  <pre><code>(defmethod get-tag-type [::dog :default] ::mutt)
  </code></pre>
  
  <p>However, this doesn't work unless <code>tag</code> is actually <code>:default</code>.</p>
  
  <p>What is a good way to accomplish this?</p>