2009/3/27 Konrad Hinsen <konrad.hin...@laposte.net> > > On the other hand, I would definitely like to be able to implement > left-to-right precedence myself on top of Clojure's multimethods, and > it seems that at the moment this is not possible.
Yes. And also the ability to redefine the method that tries to determine candidate dispatch values, so that one could write polymorphic functions not only based on ahead of time defined data hierarchy graphs. One solution could be to add more options to defmulti. Another solution could be to have a *defmulti-flavor* global var that could have for value some hashmap : { :dispatch-value-matcher function1 :dispatch-value-narrower function2 } that could be bound to a different flavor for certain multifunctions by library creators. Without that, for example, I don't know how one could prevent the combinatorial explosion of the prefer-method calls to make, even inside the boundaries of a library, even with simple hierarchies without multiple inheritence, for the following problem: A, B, C, D, E, F all inherit from Z. The library implementor wants to provide specialized functions such as: (defmethod a-method [A B C D] [a b c d] ...) (defmethod a-method [A B D C] [a b d c] ...) If the implementor is able to concisely describe the resolution mechanism with an algorithm (a function), he still will have to implement the results of his algorithm in terms of prefer-method declarations. For example, the classic above cited resolution mechanism "the leftmost specific wins" must be manually hard-coded. And in this special case it gets even worse for extension purpose as well. -- Laurent --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---