@Override
  public Value evaluate(Scope scope, Object left) throws Exception { // this is rubbish
    Value reference = evaluation.evaluate(scope, left);
    Number number = reference.getNumber();
    NumericConverter converter = NumericConverter.resolveConverter(number);
    Value value = converter.increment(number);
    Number result = value.getNumber();

    reference.setValue(result);

    return ValueType.getTransient(number);
  }
 @Override
 public Value convert(Number reference) {
   Short value = reference.shortValue();
   return ValueType.getTransient(value);
 }
 @Override
 public Value decrement(Number reference) {
   Short value = reference.shortValue();
   return ValueType.getTransient(value - 1);
 }
 @Override
 public Value convert(Number reference) {
   Double value = reference.doubleValue();
   return ValueType.getTransient(value);
 }
 @Override
 public Value decrement(Number reference) {
   Integer value = reference.intValue();
   return ValueType.getTransient(value - 1);
 }
 @Override
 public Value decrement(Number reference) {
   Float value = reference.floatValue();
   return ValueType.getTransient(value - 1.0f);
 }
 @Override
 public Value decrement(Number reference) {
   Long value = reference.longValue();
   return ValueType.getTransient(value - 1L);
 }
 @Override
 public Value convert(Number reference) {
   Long value = reference.longValue();
   return ValueType.getTransient(value);
 }
 @Override
 public Value decrement(Number reference) {
   Double value = reference.doubleValue();
   return ValueType.getTransient(value - 1.0d);
 }
 @Override
 public Value decrement(Number reference) {
   Byte value = reference.byteValue();
   return ValueType.getTransient(value - 1);
 }