internal override Value Evaluate()
{
var lhs = LeftHand.Evaluate();
var rhs = RightHand.Evaluate();
switch (Operator)
{
case Model.Operator.Plus: return lhs + rhs;
case Model.Operator.Minus: return lhs - rhs;
case Model.Operator.Mult: return lhs * rhs;
case Model.Operator.Div: return lhs / rhs;
case Model.Operator.Mod: return lhs % rhs;
case Model.Operator.Take_Exists: return !(lhs is NotFoundValue) ? lhs : rhs;
default: throw new InvalidOperationException("Unknown operator " + Operator);
}
}