Map over expressions?

#1

It might be slightly useful to define

``````map(f, e::Expr) = Expr(e.head, map(f, e.args)... )
``````

It would be useful for recursive AST functions. Of course, users defining `map_expression` themselves would probably be fine too, but it’s something I find myself doing repeatedly.

#2

Just out of curiosity, would `map!(f, e.args)` not be useful?

#3

Definitely in some situations. I tend to avoid mutating in place if at all possible when I program.

#4

While I agree that it would be useful, I would not make it a method of `Base.map`. I don’t think that `map` should be defined for composite types, let alone in ways that transform only some of the fields.

That said, I think this would be a useful addition to some macro toolkit packages, maybe one of them will include it. Perhaps submit it as a PR to one of them?