anchor.diff:                  newroot <- newroot.Array.[0] :?> Node
                   newshift <- newshift - blockSizeShift
   
  -            PersistentVector(count - 1, newshift, newroot, newtail,None)
  +            PersistentVector(count - 1, newshift, newroot, newtail)
   
           member this.rangedIterator<'a>(startIndex,endIndex) : 'a seq =
               let i = ref startIndex
  
positive.code:             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,newHash )
              else
                  //full tail, push into tree
                  let tailNode = Node(root.Thread,tail)
  
negative.code:             member this.Count() = this.EnsureEditable(); count
              member this.AssocN(i,x) = this.assocN(i,x) :> IVector<'a>
  
  and PersistentVector<[<EqualityConditionalOn>]'a> (count,shift:int,root:Node,tail:obj[])  =
      let hashCode = ref None
      let tailOff = 
          if count < blockSize then 0 else
          ((count - 1) >>> blockSizeShift) <<< blockSizeShift
  
      with
          static member Empty() = PersistentVector<'a>(0,blockSizeShift,Node(),[||])
  
          static member ofSeq(items:'a seq) =
              let mutable ret = TransientVector()
  