when package:hxt
f `when` g : when the predicate g holds, f is applied, else
the identity filter this
f `whenNot` g : when the predicate g does not hold, f is
applied, else the identity filter this
shortcut: f `whenP` p = f `when` (isA p)
recursively transforms a whole tree by applying an arrow to all
subtrees, but transformation stops when a predicte does not hold for a
subtree, leaves are transformed first