anchor.diff:              let level = ref vector.Shift
               while !level > 0 do
                   let pos = (i >>> !level) &&& 0x01f
  -                node := (!node).Array.[pos] :?> Node
  +                node := (!node).[pos] :?> Node
                   level := !level - 5
   
  -            (!node).Array
  +            !node
       else raise Exceptions.OutOfBounds
   
   let nth<'a> i (vector:PersistentVector<'a>) : 'a =
  
positive.code:     // else alloc new path
      //return  nodeToInsert placed in copy of parent
      let subidx = ((vector.Count - 1) >>> level) &&& 0x01f
      let ret = Node(Array.copy parent.Array)
  
      let nodeToInsert =
          if level = 5 then tailnode else
  
          let child = parent.Array.[subidx]
          if child <> null then
              pushTail(vector,level-5,child :?> Node,tailnode)
          else
              newPath(level-5,tailnode)
  
      ret.Array.[subidx] <- nodeToInsert :> obj
      ret
  
  let inline arrayFor<'a> i (vector:PersistentVector<'a>) =
  
negative.code:         persistentVector<'a>(vector.Count + 1,vector.Shift,vector.Root,newTail)
      else
          //full tail, push into tree
          let tailNode = vector.Tail
          let newShift = vector.Shift
  
          //overflow root?
          if (vector.Count >>> 5) > (1 <<< vector.Shift) then
              let newRoot = newNode()
              newRoot.[0] <- vector.Root :> obj
              newRoot.[1] <- newPath(vector.Shift,tailNode) :> obj
              persistentVector<'a>(vector.Count + 1,vector.Shift + 5,newRoot,[| x |])
          else
              let newRoot = pushTail(vector,vector.Shift,vector.Root,tailNode)
  