anchor.diff:                       Monitor.Exit time
   
           member this.evaluate (token : AdaptiveToken) (f : AdaptiveToken -> 'a) =
  -            let caller = token.Caller
               let depth = AdaptiveObject.EvaluationDepthValue
   
               let mutable res = Unchecked.defaultof<_>
  
positive.code:                     //printfn "%A tried to pull from level %A but has level %A" top.Id level top.Level
                      // all greater pulls would be from the future
                      raise <| LevelChangedException(this, this.Level, depth - 1)
                                                                       
                  res <- r
  
  
                  if not (isNull caller) then
                      if this.Reevaluate then
                          caller.Reevaluate <- true
  
negative.code:             // downgrade to read
              token.Downgrade this
  
              if isNull token.Caller then
                  token.Release()
  
                  if depth = 0 && not Transaction.HasRunning then 
  