anchor.diff:              node.[i &&& blockIndexMask] :?> 'a
   
           member this.cons<'a> (x:'a) =
  +            let newHash = Some(31 * Unchecked.hash this + Unchecked.hash x)
               if count - tailOff < blockSize then
                   let newTail = Array.append tail [|x:>obj|]
  -                PersistentVector<'a>(count + 1,shift,root,newTail)
  +                PersistentVector<'a>(count + 1,shift,root,newTail,newHash )
               else
                   //full tail, push into tree
                   let tailNode = Node(root.Thread,tail)
  
positive.code:                 newroot <- newroot.Array.[0] :?> Node
                  newshift <- newshift - blockSizeShift
  
              PersistentVector(count - 1, newshift, newroot, newtail)
  
          member this.rangedIterator<'a>(startIndex,endIndex) : 'a seq =
              let i = ref startIndex
  
negative.code:                     let newRoot = Node(root.Thread,Array.create blockSize null)
                      newRoot.Array.[0] <- root :> obj
                      newRoot.Array.[1] <- this.NewPath(shift,tailNode) :> obj
                      PersistentVector<'a>(count + 1,shift + blockSizeShift,newRoot,[| x |],newHash)
                  else
                      let newRoot = this.PushTail(shift,root,tailNode)
                      PersistentVector<'a>(count + 1,shift,newRoot,[| x |],newHash)
  
          member internal this.doAssoc(level,node:Node,i,x) =
              let ret = Node(root.Thread,Array.copy node.Array)
  