anchor.diff:          for e in set do content <- e::content
           set.Clear()
           content
  +        
  +    let mutable finalizers : list<unit->unit> = []
  +
  +    let runFinalizers () =
  +        let fs = Interlocked.Exchange(&finalizers, [])
  +        for f in fs do f()
  +        
  +    member x.AddFinalizer (f : unit->unit) =
  +        Interlocked.Change(&finalizers, (fun a -> f::a) ) |> ignore
   
       member x.IsContained e = contained.Contains e
       static member internal InAnyOfTheTransactionsInternal e =
  
positive.code:     /// transaction and commits the transaction
      /// </summary>
      let transact (f : unit -> 'a) =
          let t = Transaction()
          let old = current.Value
          current.Value <- Some t
          let r = f()
          current.Value <- old
          t.Commit()
          r
  
      // defines some extension utilites for
      // IAdaptiveObjects
  
negative.code:             // running transaction (if any)
              running.Value <- old
              currentLevel <- 0
  
          )
  
      interface IDisposable with
          member x.Dispose() = runFinalizers()
  
  
  type private EmptyCollection<'a>() =
  