sclass MetaTransformer { sinterface StructureHandler { O transform(O o, IF1 recurse); } L structureHandlers; //bool keepUnknown; // assume true for now *() {} *(StructureHandler... handlers) { structureHandlers = asList(handlers); } // if f returns null, go through structure O transform(IF1 f, O o) { ping(); try object f.get(o); IF1 recurse = asFunction(f); fOr (StructureHandler h : structureHandlers) { ping(); try object h.transform(o, recurse); } //ret keepUnknown ? o : null; ret o; } IF1 asFunction(IF1 f) { ret o -> transform(f, o); } }