When abstracting out common behavior by creating higher-order functions, I would like the resulting function to retain the arglist metadata. Has anyone already solved this problem? If not, are there kosher ways of going about it? I have a feeling it'd be possible to create a new def-form that would do some additional merging of metadata from var to var... But rather than diving into it immediately, I thought I'd take advantage of the question and send my first email to the Clojure mailing list! :-)
Here's some contrived code to demonstrate the topic: (defn foo [a] (fn [x y] (println a x y))) ;= #'user/foo (def bar (foo "_")) ;= #'bar (meta (var foo)) ;= {:arglists ([a]), :ns #<Namespace user>,… (:arglists (meta (var bar))) ;= nil (def ^{:arglists '([x y])} baz (foo "_")) ;= #'user/baz (def quux (partial baz "x")) ;= #'user/quux (find (meta (var quux)) :arglists) ;= nil And here is a link demonstrating how I came across it in real life: https://www.refheap.com/paste/3413 . Yes, I realized that there are mistakes in the manually-entered metadata but I decided to leave them in because they, as genuine accidents, emphasize the insufficiency of that solution. A pre-emptive "thank you" to any who help, --Josh T P.S. I can take this to StackOverflow instead if y'all think it would be more appropriate there. -- 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