@Marshall Hm, realized a reader might think
m
is just setting
f
globally. Not so: the assignment to
f
is entirely contained in
m
. Actually,
f
is passed by name, and to apply it the name is reevaluated in whatever scope it happens to be in at the time. This is known and not considered to be a bug. To fix it, you have to apply
Fix before calling an operator to expand all the names (because tacit functions can also contain them).