Hi,
Suppose I have a library with
(defun my-foo (callback)
...
(funcall callback computed-data))
Now, _some_ users of my library found out that it would be nice to have `this-value-gets-computed-as-side-effect' too, though it is not really necessary for callbacks in general. I wouldn't want to change interface of the library, instead I would just improve it like this:
(defun my-foo (callback)
...
(if (accepts-2-arguments callback)
(funcall callback computed-data this-value-gets-computed-as-side-effect)
(funcall callback computed-data)))
This way `my-foo' automagically accepts callbacks that expect one argument (as in initial form), as well as those that want two arguments.
The problem, of course, is to write `accepts-2-arguments'. I found `subr-arity', which provides exactly what I need, but only for builtins... I was also told about `help-function-arglist', but it returns the raw argument list in which you still have to handle &optional or &rest (maybe something else too?). This looks like a bit too much work for simple thing and likely not good for performance-critical places either.
Feature request: add a builtin like `subr-arity' that works for _any_ function. Evaluator sure knows how to call the functions, so the information is already there.
Paul