I've been trying out the new branch, and on the whole I like it a lot. I know it'll take some time to learn how do things properly the "new" way, and I've figured out how to do most of the things I want to do thus far. Thanks, Rich!
One thing I haven't figured out how to do cleanly without inheritance is to specify "properties" of objects in a hierarchical domain in a clean, efficient way. I'm sure I haven't fully wrapped my head around the new abstractions, so I'd love to hear about a clean way to solve this problem. A very simple example is: I have a protocol "A", and sub-protocols "A1" and "A2". Every A is either an A1 or A2, but not both (and this split is closed, as far as I'm concerned). Sometimes I want to deal with instances of A1 and A2 together, and so I put the methods shared between all "As" in protocol "A". But, at some point I need to separate out the "A1"s from the "A2"s. To do this, it seems like I have at least three options: 1. Add an "is-A1" method to Protocol A. The problem with this option is that every type that derives from A1 needs to manually write out this method returning "true", and vice-versa for implementers of A2. Users could eliminate this by "extending" their types with a mixin map to A, rather than implementing it directly in the deftype. But, this sacrifices readability (IMO) as well as efficiency. 2. use (satisfies? A1 x) to determine if x satisfies A1. The main problem with this, at least currently, is that satisfies? seems to be really slow in the negative case. I profiled my (non-trivial) program and half the runtime was going to reflection in satisfies? Moreover, this solution is not as general. 3. Use a multimethod. This would work generally and be reasonably efficient, but I feel like I'd be cluttering up my interface by mixing up protocols and multimethods. On the other hand, I guess multimethods are the main (only?) hierarchical construct built into Clojure, so maybe this is what's intended. So, which do people feel is preferred? Or have I missed a better option? Thanks! Jason -- 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