both positional and keyword arguments.
Yes one could do something like:
```
def fun(a, b=0): ...
def wraps_fun(args, b=inspect.signature(fun).parameters['b'].default): ...
```
But I would hardly call that clear. Further it is not robust as would fail if `fun` is itself wrapped in way
that destroys its signature. E.g.:
```
def
destroy_signature(f):
# should decorate here with functools.wraps(f)
def wrapper(*args, **kwargs):
return f(*args, **kwargs)
return wrapper
```
Caleb