sclass VarBasedArithmeticEngine { new MapSO vars; abstract record MultiOp(LS inVars, S outVar) implements Runnable { abstract O perform(L values); run { setVar(outVar, perform(map getVar(inVars)); } } persistent class DoubleAdd > MultiOp { *(LS *inVars, S *outVar) {} Double perform(L values) { ret doubleSum(allToDouble(values)); } } O getVar aka get(S var) { ret vars.get(var); } void setVar aka set(S var, O value) { vars.put(var, value); } }