Everything always looks good until you decide to use it. In the case of aatree, I want to build on it and, as it is written, I would need to duplicate all the code. The issue is that I am a Java programmer working in Clojure.
In Java, methods are bound to an implementation which then gets subclassed. But in Clojure, you do not subclass. So you keep the number of methods to a minimum and put the bulk of your logic in functions.
So it looks like I need to work on aatree 0.2.0. And I should add an aavector into the mix. I'm going to need aavector later anyway, and it will help drive code reuse.
But I should note that when I did this in Java, I ended up rewriting the code anyway, even with subclassing. Things just got so complicated. My expectation here is that functions are more reusable than methods, especially when multi-inheritance is not an option.
But at least I've made progress. I can now program in Clojure. I just need to write more reusable code. I am still such a newbie. There is a lot of code out there that I still can not understand without a major effort. And I'm talking about single lines of code at that!