anchor.diff:                  :> System.Collections.IEnumerator
   
           interface IVector<'a> with
  -            member this.Item with get i = this.nth i
  +            member this.Item 
  +                with get i =
  +                    this.EnsureEditable()
  +                    let node = this.ArrayFor i
  +                    node.[i &&& blockIndexMask] :?> 'a
  +
               member this.Conj x = this.conj x :> IVector<'a>
               member this.Pop() = this.pop() :> IVector<'a>
  -            member this.Peek() = if count > 0 then this.nth(count - 1) else failwith "Can't peek empty vector"
  +            member this.Peek() = if count > 0 then (this :> IVector<'a>).[count - 1] else failwith "Can't peek empty vector"
               member this.Count() = this.EnsureEditable(); count
               member this.AssocN(i,x) = this.assocN(i,x) :> IVector<'a>
   
  
positive.code:                 :> System.Collections.IEnumerator
  
          interface IVector<'a> with
              member this.Item with get i = this.nth i
              member this.Conj x = this.cons x :> IVector<'a>
              member this.Pop() = this.pop() :> IVector<'a>
              member this.Count() = count
              member this.Peek() = if count > 0 then this.nth(count - 1) else failwith "Can't peek empty vector"
  
              member this.AssocN(i,x) = this.assocN(i,x) :> IVector<'a>
  
  
negative.code: 
                      node.Array
              else raise Exceptions.OutOfBounds
  
          member this.conj<'a> (x:'a) =
              this.EnsureEditable()
  