When I re-read the thread "defrecord with inheritance" https://groups.google.com/forum/?fromgroups#!searchin/clojure/inherit/clojure/mr-o9sRyiZ0/oM4zRz4dXYsJ
I am thinking: conceptually, for code reuse, is it a good idea to have protocol specific type hierarchy? I mean something like this: (defrecord a [x y z]) (defrecord b [x y z]) (defprotocol p (foo [this] "Hi")) (record-derive b a p) So the above means, when protocol "p" is concerned, type "a" is the parent for type "b", and any implementation of "a" of "p" applies to "b" if "b" does not have its own implementation. This is similar to type based dispatching in multimethod, but right now it seems "(derive b a)" is not allowed with record as the parent. I believe inheritance is not bad, but the traditional OO way fixes the hierarchy from one pre-designated perspective hence cause trouble when you need to look at things from another perspective. Right now the protocol actually already works on build-in Java hierarchy. Example: (defprotocol testp (foo[this])) (extend-protocol testp clojure.lang.PersistentVector (foo [this] "PersistentVector impl")) (extend-protocol testp clojure.lang.Seqable (foo [this] "Seqable impl")) (foo []) => "PersistentVector impl" (foo '()) => "Seqable impl" I have no idea if the above is implementable. Any comments? -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en