(def m {:os ::osx})
(defmulti ex :os)
(defmethod ex ::unix
[_]
"unix")
(derive ::osx ::unix)
(ex m)
;;=> "unix"
(defmethod ex ::bsd
[_]
"bsd")
(derive ::osx ::bsd)
;; which one to choose ::unix or ::bsd ?? -> Conflict!!!
(ex m)
;;=> IllegalArgumentException Multiple methods in multimethod 'ex' match...
(prefer-method ex ::unix ::bsd)
(ex m)
;;=> "unix"