anchor.diff:  
           member internal this.NewPath(level,node:Node) =
               if level = 0 then node else
  -            let ret = Array.create 32 null   
  -            ret.[0] <- this.NewPath(level - 5,node) :> obj
  +            let ret = Node(root.Thread,Array.create 32 null)
  +            ret.Array.[0] <- this.NewPath(level - 5,node) :> obj
               ret
   
           member internal this.PushTail(level,parent:Node,tailnode) =
  
positive.code: 
          member this.persistent() : PersistentVector<'a> =
              this.EnsureEditable()
              // TODO: root.edit.set(null)
              let l = count - this.TailOff()
              let trimmedTail = Array.init l (fun i -> tail.[i])
              PersistentVector(count, shift, root, trimmedTail)
  
          member internal this.EnsureEditable() = () // TODO:
          member internal this.TailOff() =
              if count < 32 then 0 else
              ((count - 1) >>> 5) <<< 5
  
negative.code:                 //overflow root?
                  let newRoot = 
                      if (count >>> 5) > (1 <<< shift) then
                          let newRoot = Node(root.Thread,Array.create 32 null)
                          newRoot.Array.[0] <- root :> obj
                          newRoot.Array.[1] <- this.NewPath(shift,tailNode) :> obj
                          shift <- shift + 5
                          newRoot
                      else
  