anchor.diff:        return s.insert(current, value);
       }
       else if(s is PersistentVector) {
  +      if(current == s.length) {
  +        return s.push(value);
  +      }
         return s.set(current, value);
       }
       else if(s is TransientMap) {
         return s.doInsert(current, value);
       }
       else if(s is TransientVector) {
  +      if(current == s.length) {
  +        return s.doPush(value);
  +      }
         return s.doSet(current, value);
       }
       else {
  
positive.code:       return s.delete(current);
      }
      else if(s is PersistentVector) {
        if(s.length + 1 == current) s.pop();
        else throw new Exception('Cannot delete non last element in PersistentVector');
      }
      else if(s is TransientMap) {
        return s.doDelete(current);
      }
      else if(s is TransientVector) {
        if(s.length + 1 == current) s.doPop();
        else throw new Exception('Cannot delete non last element in TransientVector');
      }
      else {
  
negative.code:     });
    }
    else if(from is List) {
      from = from.map((e) => deepPersistent(e));
      return new PersistentVector.from(from);
    }
    else {
      return from;
    }
  }
  
  final _none = new Object();
  final getNone = () => _none;
  bool isNone(val) => val == _none;
  