Is there any reason they cannot be implemented as structs with some sort of type tag?
On Wed, Feb 25, 2009 at 10:26 AM, Konrad Hinsen <konrad.hin...@laposte.net>wrote: > > I have just added a new library to clojure.contrib. It provides a > proof-of-concept implementation of algebraic data types. An example > for what you can do with it: > > (deftype tree > empty-tree > (leaf value) > (node left-tree right-tree)) > > (def a-tree (node (leaf :a) > (node (leaf :b) > (leaf :c)))) > > (defn depth > [#^tree t] > (match t > empty-tree 0 > (leaf n) 1 > (node l r) (inc (max (depth l) (depth r))))) > > (depth empty-tree) > (depth a-tree) > > > For more examples, see clojure.contrib.types.examples. > > The reason why I call this a proof-of-concept implementation is that > it has a major drawback that seriously limits its applicability: > equality tests on objects created from these types are done by > identity, not by value equality, which makes them practically > useless. This is due to the fact that the objects are actually > implemented as closures. Another drawback, following as well from the > implementation as closures, is that the objects cannot have any meta- > data attached. > > Closures are the simplest way to create a new Java class in Clojure, > but they have the disadvantage of equality-by-identity. I have an > idea for a better implementation, based on gen-class and proxy, but > before embarking on this I'd like to see some feedback on the current > implementation. Is this something you would like to use? > > Konrad. > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---