anchor.diff:    E get first => _get(0);
     E get last => _get(this.length > 0 ? this.length - 1 : 0);
     int get length => _size;
  -  Iterator<E> get iterator => new VectorIterator<E>(this);
  -}
  -
  -class VectorIterator<E> extends Iterator<E> {
  -  PersistentVectorBase<E> _parentVector;
  -  int _position = -1;
  -  int _length;
  -
  -  VectorIterator(this._parentVector) {
  -    _length = _parentVector.length;
  -  }
  -
  -  bool moveNext() {
  -    if (_length == _position + 1) return false;
  -    _position++;
  -    return true;
  -  }
  -
  -  E get current => _parentVector._get(_position);
  +  Iterator<E> get iterator => new VectorIterator([this._root, this._tail]);
   }
   
   abstract class BaseVectorImpl<E> extends PersistentVectorBase<E> {
  
positive.code: 
    _VNode _removeAfter(Owner ownerID, int newSize) {
      var sizeIndex = (newSize - 1) & _MASK;
      if (sizeIndex >= this.length - 1) {
        return this;
      }
      var editable = _transientVNode(this, ownerID);
      editable._array.removeRange(sizeIndex + 1, editable.length);
      return editable;
  
    }
  
negative.code: 
  }
  
  class VectorIterator<E> implements Iterator<E> {
    List _array;
    int _index = 0;
    Iterator _current = null;
  
    VectorIterator(this._array);
    E get current => (_current != null) ? _current.current : null;
  
    bool moveNext() {
      while(_index < _array.length) {
        if (_current == null) {
          _current = _array[_index].iterator;
        }
        if (_current.moveNext()) {
          return true;
        } else {
          _current = null;
          _index++;
        }
      }
      return false;
    }
  }
  
  class _VNode {
    List _array;
    Owner _ownerID;
  
    int get length => _array.length;
  
    Iterator get iterator {
      if (_array.length == 0) return _array.iterator;
      if (_array[0] is _VNode) return new VectorIterator(_array);
      return _array.iterator;
    }
  
    String toString() {
      return "VNode: " + _array.toString();
  