;;; it doesn't cover defrecord or deftype
;;; (Using example of the P protocol defined above)
(defrecord PP []
P
(id [this] (str this ":" this)))
(deftype PPP []
P
(id [this] (str this ":" this ":" this)))
(extenders P)
;; => (java.lang.String clojure.lang.Symbol clojure.lang.Keyword)