sclass MetaTransformer { sinterface StructureHandler { O transform(IF1 f, O o, MetaTransformer mt); } 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); fOr (StructureHandler h : structureHandlers) { ping(); try object h.transform(f, o, this); } //ret keepUnknown ? o : null; ret o; } IF1 asFunction(IF1 f) { ret o -> transform(f, o); } }