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
like whenP
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