On Nov 12, 1:10 pm, Rich Hickey <richhic...@gmail.com> wrote: > An early version of the code for a few important new language > features, datatypes[1] and protocols[2] is now available in the 'new' > branch[3]. Note also that the build system[4] has builds of the new > branch, and that the new branch works with current contrib. > > If you have the time and inclination, please try them out. Feedback is > particularly welcome as they are being refined.
I really like the semantics of your constructs. I have a comment about regularity of syntax: The way to specify method names in reify and deftype vs. function names defprotocol and extend are different. It looks like when dealing with interface-method implementations one uses .methodName (i.e., with the dot), but when dealing with protocol functions one uses no dot. Further, extend uses maps (the docs says why this is the case). I was thinking this may make syntax irregular. I suspect this is a deliberate design choice to distinguish clojure protocols from java interfaces? Is this the case? A stupid example: ;;uses dot (deftype Sometype [x] [java.lang.Comparable] (.compareTo [o] ...)) ::uses no dot (defprotocol RSeqable :on clojure.lang.Seqable "Seqable and reverse seqable" (rseq [s] "reverse seq")) ;;do I mix dot and not? (extend ::Sometype :RSeqable {:rseq (fn [a]...)) :.seq (fn [a] ...)} ;; do I write :.seq here or :seq? I guess one can reintroduce the regularity using the :on feature of protocol functions. Any thoughts? /Karl -- 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