(defn wider-tag
"Given a collection of Classes returns the wider one"
[tags]
(let [tags* (filter identity tags)
wider (loop [wider (first tags*) tags* (rest tags*)]
(if (seq tags*)
(if-let [t (wider-tag* wider (first tags*))]
(recur t (rest tags*)))
wider))]
(when (or (= tags* tags)
(not (primitive? wider)))
wider)))