I'm using clojure.walk/postwalk to rewrite terms in nested data
structures. However, I am unable to do this with types as defined by
defrecord, because they specify that the function "empty"  throw a not-
implemented exception.

If I were able to over-ride this default implementation of 'empty' I
believe I could still use postwalk to rewrite my custom records (as
they happily implement 'into' which works as expected.)

This was my obvious first attempt:

(defrecord TypeVar [guid name]
  clojure.lang.IPersistentCollection
  (empty [coll] (TypeVar. 0 nil)))

Which fails due to:

"Duplicate method name&signature in class file types/TypeVar"
  [Thrown class java.lang.ClassFormatError]

I would prefer not to fall back on deftype as I do wish these objects
to behave as maps. I also could write my own version of postwalk that
doesn't call 'empty' on my custom-defined records, but it would be
nice to make my types adhere to the contract of IPersistentCollection
as much as possible.

-- 
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

Reply via email to