sS tok_genRecordTransformable(S name, LPairS fields) { ret "public O transformUsing(IF1 f) { " + (empty(fields) ? "this;" : "ret new " + name + "(" + joinWithComma(mapPairs(fields, (type, field) -> (eqOneOf(type, "O", "Object") ? "" : "(" + tok_varArgTypeToArray(type) + ") ") + "f.get(" + field + ")")) + ");") + " }\n" + "public void visitUsing(IVF1 f) {" + + joinPrependSpace(map(pairsB(fields), field -> "f.get(" + field + ");")) + " }\n"; }