Re: auxiliary methods like :before and :after for multimethods?
Can you elaborate more about how the system should behave? Also, I don't think it's correct to say that you own the target function here, since hook applies to the whole defmulti, not to some concrete defmethod, so I don't see any difference between hooks for functions and multimethods in this case. суббота, 28 июля 2012 г., 9:37:57 UTC+6 пользователь George Oliver написал: On Friday, July 27, 2012 12:06:33 PM UTC-7, Vinzent wrote: robert-hooke actualy doesn't work with multimethods afaik. You can try my new library (https://github.com/dnaumov/hooks), but it's alpha (no docs yet, sorry). Yes, from the robert-hooke readme, Adding hooks to a defmulti is discouraged as it will make it impossible to add further methods. Hooks are meant to extend functions you don't control; if you own the target function there are obviously better ways to change its behaviour.. What got me thinking about :before and :after was the question of how to add a lightweight rules system to an application. Do you think hooks are appropriate here? -- 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
Re: auxiliary methods like :before and :after for multimethods?
On Fri, Jul 27, 2012 at 9:06 PM, Vinzent ru.vinz...@gmail.com wrote: robert-hooke actualy doesn't work with multimethods afaik. You can try my new library (https://github.com/dnaumov/hooks), but it's alpha (no docs yet, sorry). (defmulti foo* (fn [args] ...) ...) (defmethod foo* :x [args]...) (defmethod foo* :y [args] ...) (defn foo [args] (foo* args)) Only foo calls foo*. Everyone else calls foo. Apply hooks to foo. http://en.wikipedia.org/wiki/Fundamental_theorem_of_software_engineering ;-) // Ben Any suggestions about API is welcome. -- 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
Re: auxiliary methods like :before and :after for multimethods?
On Jul 28, 2012, at 7:02 AM, Ben Smith-Mannschott wrote: On Fri, Jul 27, 2012 at 9:06 PM, Vinzent ru.vinz...@gmail.com wrote: robert-hooke actualy doesn't work with multimethods afaik. You can try my new library (https://github.com/dnaumov/hooks), but it's alpha (no docs yet, sorry). (defmulti foo* (fn [args] ...) ...) (defmethod foo* :x [args]...) (defmethod foo* :y [args] ...) (defn foo [args] (foo* args)) Only foo calls foo*. Everyone else calls foo. Apply hooks to foo. http://en.wikipedia.org/wiki/Fundamental_theorem_of_software_engineering ;-) // Ben robert.hooke works fine with multimethods: user= (defmulti foo class) nil user= (defmethod foo :default [x] (str x)) #MultiFn clojure.lang.MultiFn@7539f0bb user= (require '[robert.hooke :refer (add-hook)]) nil user= (add-hook #'foo (fn [f [x]] (str K: (f x (#user$eval3072$fn__3074 user$eval3072$fn__3074@534b58c) user= (foo 42) K: 42 More interesting still would be the ability to add hooks to particular methods. `defmethod` doesn't define a new var, so that's not generally possible, but you can work around it by defining functions and tying them to multimethods in separate operations: user= (defmulti twice class) #'user/twice user= (defn twice-n [n] (* n n)) #'user/twice-n user= (defn twice-s [s] (str s s)) #'user/twice-s user= (.addMethod twice Number #'twice-n) #MultiFn clojure.lang.MultiFn@6a04919b user= (.addMethod twice String #'twice-s) #MultiFn clojure.lang.MultiFn@6a04919b user= (twice 5) 25 user= (twice hi) hihi user= (add-hook #'twice-n (fn [f [n]] (f (dec n (#user$eval3044$fn__3046 user$eval3044$fn__3046@fa328aa) user= (twice 5) 16 These sorts of situations makes me want for an add-method to go along with remove-method and get-method, just to avoid the .addMethod interop form. - Chas -- 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
Re: auxiliary methods like :before and :after for multimethods?
robert.hooke works fine with multimethods: user= (defmulti foo class) nil user= (defmethod foo :default [x] (str x)) #MultiFn clojure.lang.MultiFn@7539f0bb user= (require '[robert.hooke :refer (add-hook)]) nil user= (add-hook #'foo (fn [f [x]] (str K: (f x (#user$eval3072$fn__3074 user$eval3072$fn__3074@534b58c) user= (foo 42) K: 42 foo is a plain function now. -- 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
Re: auxiliary methods like :before and :after for multimethods?
On Jul 28, 2012, at 4:36 PM, Vinzent wrote: robert.hooke works fine with multimethods: user= (defmulti foo class) nil user= (defmethod foo :default [x] (str x)) #MultiFn clojure.lang.MultiFn@7539f0bb user= (require '[robert.hooke :refer (add-hook)]) nil user= (add-hook #'foo (fn [f [x]] (str K: (f x (#user$eval3072$fn__3074 user$eval3072$fn__3074@534b58c) user= (foo 42) K: 42 foo is a plain function now. Oh, right, good point. I've generally used hooks to modify others' multimethods, and so I suppose I've been lucky to always apply the hook after all methods had been registered. - Chas -- 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
Re: auxiliary methods like :before and :after for multimethods?
robert-hooke actualy doesn't work with multimethods afaik. You can try my new library (https://github.com/dnaumov/hooks), but it's alpha (no docs yet, sorry). Any suggestions about API is welcome. пятница, 27 июля 2012 г., 3:15:44 UTC+6 пользователь George Oliver написал: hi, I'm wondering if anyone has extended multimethods with auxiliary methods like CL-style :before and :after, and if not what a suitable substitute might be. thanks, George -- 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
Re: auxiliary methods like :before and :after for multimethods?
On Friday, July 27, 2012 12:06:33 PM UTC-7, Vinzent wrote: robert-hooke actualy doesn't work with multimethods afaik. You can try my new library (https://github.com/dnaumov/hooks), but it's alpha (no docs yet, sorry). Yes, from the robert-hooke readme, Adding hooks to a defmulti is discouraged as it will make it impossible to add further methods. Hooks are meant to extend functions you don't control; if you own the target function there are obviously better ways to change its behaviour.. What got me thinking about :before and :after was the question of how to add a lightweight rules system to an application. Do you think hooks are appropriate here? -- 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
auxiliary methods like :before and :after for multimethods?
hi, I'm wondering if anyone has extended multimethods with auxiliary methods like CL-style :before and :after, and if not what a suitable substitute might be. thanks, George -- 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
Re: auxiliary methods like :before and :after for multimethods?
https://github.com/technomancy/robert-hooke/ On Thu, Jul 26, 2012 at 2:15 PM, George Oliver georgeolive...@gmail.com wrote: hi, I'm wondering if anyone has extended multimethods with auxiliary methods like CL-style :before and :after, and if not what a suitable substitute might be. thanks, George -- 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 -- And what is good, Phaedrus, And what is not good— Need we ask anyone to tell us these things? -- 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