anchor.diff:                  if i >= tailOff then
                       let newTail = Array.copy tail
                       newTail.[i &&& blockIndexMask] <- x :> obj
  -                    PersistentVector(count, shift, root, newTail)
  +                    PersistentVector(count, shift, root, newTail,None)
                   else
  -                    PersistentVector(count, shift, this.doAssoc(shift, root, i, x), tail)
  +                    PersistentVector(count, shift, this.doAssoc(shift, root, i, x),tail,None)
               elif i = count then
                   this.cons x
               else raise Exceptions.OutOfBounds
  
positive.code:             if count = 1 then PersistentVector<'a>.Empty() else
  
              //if(tail.length > 1)
              if count - tailOff > 1 then PersistentVector(count - 1, shift, root, tail.[0..(tail.Length-1)]) else
  
              let newtail = this.ArrayFor(count - 2)
  
  
negative.code:             root.SetThread null
              let l = count - this.TailOff()
              let trimmedTail = Array.init l (fun i -> tail.[i])
              PersistentVector(count, shift, root, trimmedTail,None)
  
          member internal this.EnsureEditable() =
              if !root.Thread = Thread.CurrentThread then () else
  