anchor.diff:        this.cursorVersion <-  this.source.orderVersion
         this.index <- -1
   
  -    member this.Dispose() = 
  -      this.Reset()
  -      if this.isSubscribed then
  -        this.source.onNextEvent.Publish.RemoveHandler(this.onNextHandler)
  -        this.source.onCompletedEvent.Publish.RemoveHandler(this.onCompletedHandler)
  -        this.source.onErrorEvent.Publish.RemoveHandler(this.onErrorHandler)
  +    member this.Dispose() = this.Reset()
   
       interface IDisposable with
         member this.Dispose() = this.Dispose()
  
positive.code:           | _ -> failwith "Unknown AppendOption"
          finally
            exitLockIf this.SyncRoot entered
        // do not need transaction because if the first addition succeeds then all others will be added as well
  //      for i in appendMap do
  //        this.AddLast(i.Key, i.Value)
        //raise (NotImplementedException("TODO append impl"))
      
    //#endregion
  
  
negative.code:       res <- Unchecked.defaultof<KeyValuePair<'K, 'V>>
        false
  
    override this.GetCursor() =
      if isMutable then this.GetCursor(-1,  this.orderVersion, Unchecked.defaultof<'K>, Unchecked.defaultof<'V>) :> ICursor<'K,'V>
      else 
        // optimization when SM represents an immutable chunk
        // TODO this doesn't work for the compiler optimization
        new SortedMapCursor<'K,'V>(this) :> ICursor<'K,'V>
  
    member internal this.GetSMCursor() = new SortedMapCursor<'K,'V>(this)
  
    // for foreach optimization
    // TODO(?) replace with a mutable struct, like in SCG.SortedList<T>, there are too many virtual calls and reference cells in the most critical paths like MoveNext
    // NB Object expression with ref cells are surprisingly fast compared to a custom class or even a struct
  