anchor.diff:                  | :? IAdaptiveObject as o -> x.Id = o.Id
                   | _ -> false
   
  +        member x.Weak =
  +            let o = x.WeakThis
  +            if isNull o then
  +                let r = new WeakReference<IAdaptiveObject>(x)
  +                x.WeakThis <- r
  +                r
  +            else
  +                o
  +
  +        interface IWeakable<IAdaptiveObject> with
  +            member x.Weak = x.Weak
  +
           interface IAdaptiveObject with
               member x.Id = x.Id
               member x.OutOfDate
  
positive.code:             res
  
      member x.Add(value : 'a) : bool =
          let value = Weak value
          if isNull set then 
              let id = pset.IndexOf(value)
              if id < 0 then 
  
negative.code:         
  
      member x.Remove(value : 'a) : bool =
          let value = value.Weak
          if isNull set then 
              pset.Remove(value)
          else
              set.Remove value
  
  type VolatileCollectionStrong<'a>() =
      let mutable set : HashSet<'a> = null
      let mutable pset : List<'a> = List()
  
      member x.IsEmpty = 
          if isNull set then pset.Count = 0
          else set.Count = 0
  
      member x.Consume(length : byref<int>) : array<'a> =
          if isNull set then
              let res = pset.ToArray()
              length <- res.Length
              pset.Clear()
              res
          else
              let res = set.ToArray()
              length <- res.Length
              set.Clear()
              res
  
      member x.Add(value : 'a) : bool =
          if isNull set then 
              let id = pset.IndexOf(value)
              if id < 0 then 
                  pset.Add(value)
                  if pset.Count > 8 then
                      set <- HashSet pset
                      pset <- null
                  true
              else 
                  false
          else
              set.Add value
          
  
      member x.Remove(value : 'a) : bool =
          if isNull set then 
              pset.Remove(value)
          else
              set.Remove value
  
  /// <summary>
  /// IAdaptiveObject represents the core interface for all
  