sclass DeepZipTools { // define what a variable is swappable bool isVar(O o) { ret o instanceof S && isDollarVar(o/S) || o instanceof SymVar; } MetaTransformer metaTransformer = metaTransformer_transformableAndList(); MetaTransformer metaTransformer() { ret metaTransformer; } // and the usual transformation utils swappable Map deepZip(O a, O b) { ret newGazelle_deepZip1(a, b); } swappable O replaceVars(O o, Map map) { ret replaceVars_understandsTransformableAndList(o, map); //if (empty(map)) ret o; //ret metaTransformer().transform(x -> map.get(x), map); } O transform(IF1 f, O o) { ret metaTransformer().transform(f, o); } }