anchor.diff:  
   let (|->), combine = 
       let newbranch p1 t1 p2 t2 = 
  -        let zp = p1 lxor p2
  -        let b = zp land (-zp)
  -        let p = p1 land (b - 1)
  -        if p1 land b = 0
  +        let zp = p1 ^^^ p2
  +        let b = zp &&& (-zp)
  +        let p = p1 &&& (b - 1)
  +        if p1 &&& b = 0
           then Branch(p, b, t1, t2)
           else Branch(p, b, t2, t1)
       let rec define_list (x, y as xy) l = 
  
positive.code:                      | r -> Branch(p1, b1, l1, r))
              elif b2 < b1
              then 
                  if p1 land (b2 - 1) <> p2
                  then newbranch p1 t1 p2 t2
                  elif p1 land b2 = 0
                  then 
                      (match combine op z t1 l2 with
                       | Empty -> r2
  
negative.code:         let rec look t = 
              match t with
              | Leaf(h, l) when h = k -> apply_listd l d x
              | Branch(p, b, l, r) when (k ^^^ p) &&& (b - 1) = 0 -> 
                  look(if k &&& b = 0
                       then l
                       else r)
              | _ -> d x
  