anchor.diff:      ret.[0] <- newPath(level - 5,node) :> obj
       ret
   
  -let rec pushTail(vector,level,parent:Node,tailnode) =
  +let rec pushTail(vector:TransientVector<'a>,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
  
positive.code: 
  let emptyNode = newNode()
  
  type TransientVector<'a> =  {
      Count : int
      Shift : int
      Root : Node
      Tail : obj[]
      TailOff: int }
  
  let inline count vector = vector.Count
  
  let inline transientVector<'a>(count,shift,root,tail) : TransientVector<'a> = {
      Count = count
      Shift = shift
      Root = root
      Tail = tail 
      TailOff = 
          if count < 32 then 0 else
          ((count - 1) >>> 5) <<< 5 }
  
  let empty<'a> = transientVector<'a>(0,5,emptyNode,[||])
  
  let rec newPath(level,node:Node) =
      if level = 0 then node else
  
negative.code:         if i >= vector.TailOff then
              let newTail = Array.copy vector.Tail
              newTail.[i &&& 0x01f] <- x :> obj
              TransientVector(vector.Count, vector.Shift, vector.Root, newTail)
          else
              TransientVector(vector.Count, vector.Shift, doAssoc(vector.Shift, vector.Root, i, x), vector.Tail)
      elif i = vector.Count then
          cons x vector
      else raise Exceptions.OutOfBounds
  