anchor.diff:              // else alloc new path
               //return  nodeToInsert placed in copy of parent
               let subidx = ((count - 1) >>> level) &&& 0x01f
  -            let ret = Array.copy parent
  +            let ret = Node(parent.Thread,Array.copy parent.Array)
   
               let nodeToInsert =
                   if level = 5 then tailnode else
   
  -                let child = parent.[subidx]
  +                let child = parent.Array.[subidx]
                   if child <> null then
                       this.PushTail(level-5,child :?> Node,tailnode)
                   else
                       this.NewPath(level-5,tailnode)
   
  -            ret.[subidx] <- nodeToInsert :> obj
  +            ret.Array.[subidx] <- nodeToInsert :> obj
               ret
   
           member internal this.ArrayFor<'a> i =
  
positive.code:             this
  
          member internal this.doAssoc(level,node:Node,i,x) =
              let ret = node
              if level = 0 then 
                  ret.[i &&& 0x01f] <- x :> obj 
              else
                  let subidx = (i >>> level) &&& 0x01f
                  ret.[subidx] <- this.doAssoc(level - 5, node.[subidx] :?> Node, i, x) :> obj
              ret
  
          member this.assocN<'a> i (x:'a) : TransientVector<'a> =
  
negative.code:                     let mutable level = shift
                      while level > 0 do
                          let pos = (i >>> level) &&& 0x01f
                          node <- node.Array.[pos] :?> Node
                          level <- level - 5
  
                      node.Array
              else raise Exceptions.OutOfBounds
  
          member this.nth i =
  