sclass DeepZipTools { // define what a variable is swappable bool isVar(O o) { ret o instanceof S && isDollarVar(o/S) || o instanceof SymVar; } // 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); } }