```"A difference expression.

Defined via [[Invertible.minus]]. Left-associative.

Examples:

size - 1
lastIndex - firstIndex"
see (`class SubtractAssignmentOperation`)
shared class DifferenceOperation(minuend, subtrahend)
extends ArithmeticOperation() {

"The minuend (the `a` in `a - b`)."
"The subtrahend (the `b` in `a -b`)."
shared ScalingExpression subtrahend;

"The minuend (the `a` in `a - b`)."
see (`value minuend`)
shared actual AddingExpression leftOperand = minuend;
"The subtrahend (the `b` in `a -b`)."
see (`value subtrahend`)
shared actual ScalingExpression rightOperand = subtrahend;

shared actual [AddingExpression, ScalingExpression] children = [leftOperand, rightOperand];

operator = "-";

shared actual Result transform<out Result>(Transformer<Result> transformer)
=> transformer.transformDifferenceOperation(this);

shared actual void visit(Visitor visitor)
=> visitor.visitDifferenceOperation(this);

shared actual Boolean equals(Object that) {
if (is DifferenceOperation that) {
return leftOperand==that.leftOperand && rightOperand==that.rightOperand;
} else {
return false;
}
}

shared actual Integer hash
=> 31 * (leftOperand.hash + 31*rightOperand.hash);

shared DifferenceOperation copy(AddingExpression leftOperand = this.leftOperand, ScalingExpression rightOperand = this.rightOperand) {
value ret = DifferenceOperation(leftOperand, rightOperand);
copyExtraInfoTo(ret);
return ret;
}
}
```