anchor.diff:      do for e in initial do
           let id = Unique.id e
           let mutable isNew = false
  -        let v = cache.GetOrCreate(e, fun k -> isNew <- true; create k)
  +        let v = cache.GetOrCreate(e, (fun k -> isNew <- true; create k), update)
           if not (content.Add v) then
               update(v,e)
   
  
positive.code:                 let added = HashSet()
                  for k in PSet.toSeq keys do
                      let id = Unique.id k
                      let v = cache.GetOrCreate(k, create)
                      if not (removed.Remove v) then 
                          added.Add v |> ignore
  
  
negative.code: type IReuseCache =
      interface end
  
  type ReuseCache<'v>() =
      let store = ConditionalWeakTable<Id, ref<'v>>()
      
      interface IReuseCache
  
      member x.GetOrCreate(k : 'k, create : 'k -> 'v, update : 'v * 'k -> unit) =
          let i = Unique.id k
          lock store (fun () ->
              match store.TryGetValue i with
                  | (true, v) -> 
                      let v = !v
                      update (v,k)
                      v
                  | _ -> 
                      let v = create k
                      store.Add(i, ref v)
                      v
          )
  