anchor.diff:  /// defines a base class for all adaptive objects implementing
   /// IAdaptiveObject.
   /// </summary>
  -[<AbstractClass>]
   type AdaptiveObject() =
       let id = newId()
       let mutable outOfDate = true
  
positive.code:     /// Note that this function takes care of appropriate locking
      /// </summary>
      member x.EvaluateIfNeeded (otherwise : 'a) (f : unit -> 'a) =
          lock x (fun () ->
              if x.OutOfDate then
                  IncrementalLog.startEvaluate x
                  let r = f()
                  x.OutOfDate <- false
                  IncrementalLog.endEvaluate x
                  r
              else
                  otherwise
          )
  
      /// <summary>
      /// utility function for evaluating an object even if it
  
negative.code:     let outputs = WeakSet<IAdaptiveObject>() :> ICollection<_>
      let callbacks = ConcurrentHashSet<unit -> unit>() :> ICollection<_>
  
      static let isTopLevel = new System.Threading.ThreadLocal<bool>(fun () -> true)
      static let time = AdaptiveObject() :> IAdaptiveObject
  
      static member Time = time
  
      /// <summary>
      /// utility function for evaluating an object if
      /// it is marked as outOfDate. If the object is actually
  