anchor.diff:  
   let emptyNode = newNode()
   
  -type PersistentVector<'a> =  {
  -    Count : int
  -    Shift : int
  -    Root : Node
  -    Tail : obj[]
  -    TailOff: int }
  +type PersistentVector<'a> (count,shift,root,tail) = 
  +    let tailOff = 
  +        if count < 32 then 0 else
  +        ((count - 1) >>> 5) <<< 5
  +    with
  +        member this.Count = count
  +        member internal this.Shift = shift
  +        member internal this.Root = root
  +        member internal this.Tail = tail
  +        member internal this.TailOff = tailOff
   
  -let inline count vector = vector.Count
  +let inline count (vector:PersistentVector<'a>) = vector.Count
   
  -let inline persistentVector<'a>(count,shift,root,tail) : PersistentVector<'a> = {
  -    Count = count
  -    Shift = shift
  -    Root = root
  -    Tail = tail 
  -    TailOff = 
  -        if count < 32 then 0 else
  -        ((count - 1) >>> 5) <<< 5 }
  -
  -let empty<'a> = persistentVector<'a>(0,5,emptyNode,[||])
  +let empty<'a> = PersistentVector<'a>(0,5,emptyNode,[||])
   
   let rec newPath(level,node:Node) =
       if level = 0 then node else
  
positive.code:     ret.[0] <- newPath(level - 5,node) :> obj
      ret
  
  let rec pushTail(vector,level,parent:Node,tailnode) =
      //if parent is leaf, insert node,
      // else does it map to an existing child? -> nodeToInsert = pushNode one more level
      // else alloc new path
  
negative.code:             i := !i + 1 
         }
  
  let toSeq (vector:PersistentVector<'a>) = rangedIterator 0 vector.Count vector