anchor.diff:          match tree with
           | Empty ->
               CharDiet.Singleton (a, b)
  -            |> tapInvariant
  +            |> tap (fun x -> assert (dietInvariant x))
           | Node (left, right, (x, y), _) ->
               if b < pred x then
                   let left' = addRange (a, b) left
                   assert (dietInvariant left')
                   CharDiet.Join (comparer, left', right, (x, y))
  -                |> tapInvariant
  +
  +                |> tap (fun x -> assert (dietInvariant x))
               elif a > succ y then
                   let right' = addRange (a, b) right
                   assert (dietInvariant right')
                   CharDiet.Join (comparer, left, right', (x, y))
  -                |> tapInvariant
  +                |> tap (fun x -> assert (dietInvariant x))
               else
                   // Now, we know the interval (a, b) being inserted either overlaps or is
                   // adjancent to the current inverval (x, y), so we merge them.
  
positive.code:                     union' left (Some <| pred a) head stream
                  else
                      left, head, stream
              union_helper (tapInvariant left') (a, b) right limit head (tapInvariant stream')
  
      /// Helper function for computing the union of two sets.
      and private union_helper left (a, b) (right : CharDiet) limit head stream =
  
negative.code: 
          match head with
          | None ->
              (tap (fun x -> assert (dietInvariant x)) <| CharDiet.Join (comparer, left, right, (a, b))), None, Empty
          | Some (x, y) ->
              if y < a && y < pred a then
                  let left' = addRange (x, y) left
  