anchor.diff:  
           if not moved then continueMoves <- false
           // must add it back regardless of moves
  +        // TODO (perf) should benefit here from RemoveFirstAddLast method, becuase is moved = true, 
  +        // we add the last value by construction
           discreteKeysSet.Add(KV(ac.CurrentKey, first.Value)) |> ignore
   
         // now all discrete cursors have moved at or ahead of frontier
  
positive.code: 
      // Manual state machine instead of a task computation expression, this is visibly faster
      let doMoveNextDiscreteTask(ct:CancellationToken) : Task<bool> =
        let mutable tcs = Runtime.CompilerServices.AsyncTaskMethodBuilder<bool>.Create() //new TaskCompletionSource<_>() //
        let returnTask = tcs.Task // NB! must access this property first
        let mutable firstStep = ref true
  
negative.code:         if c.Value.MoveLast() then c.Value.Current else invalidOp "Series is empty"
  
      member this.TryFind(k:'K, direction:Lookup, [<Out>] result: byref<KeyValuePair<'K, 'V>>) = 
        if c.Value.MoveAt(k, direction) then
          result <- c.Value.Current 
          true
        else false
  