def METHOD_NAME(rule, fns=basic_fns):
    """Strategic all - apply rule to args."""
    op, new, children, leaf = map(fns.get, ('op', 'new', 'children', 'leaf'))
    def all_rl(expr):
        if leaf(expr):
            return expr
        args = map(rule, children(expr))
        return new(op(expr), *args)
    return all_rl