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:                 elif l' = []
                  then Empty
                  else Leaf(h, l')
              | Branch(p, b, l, r) when k land (b - 1) = p -> 
                  if k land b = 0
                  then 
                      let l' = und l
                      if l' == l
  
negative.code:                 else Leaf(h1, l)
              else newbranch h1 t1 h2 t2
          | (Leaf(k, lis) as lf), (Branch(p, b, l, r) as br) -> 
              if k &&& (b - 1) = p
              then 
                  if k &&& b = 0
                  then 
                      (match combine op z lf l with
                       | Empty -> r
  