// meta-transform function that understands Transformable and List // if f returns null, go through structure sO lambdaMapLike transform_understandsTransformableAndList_keepUnknown(IF1 f, O o) { if (o == null) null; ping(); try object f.get(o); IF1 myself = x -> transform_understandsTransformableAndList_keepUnknown(f, x); if (o cast Transformable) ret o.transformUsing(myself); if (o cast L) ret map(myself, o); ret o; }