anchor.diff:      /// The index of the first element that _must_ be retained in memory
       /// because it is going to be used to generate a token.
       mutable StartingIndex: uint64
  -    /// The line the stream is currently at.
  -    mutable CurrentLine: uint64
  -    /// The column the stream is currently at.
  -    mutable CurrentColumn: uint64
  -    /// The character index the stream is currently at.
  -    mutable CurrentIndex: uint64
  +    mutable CurrentPosition: Position
       /// [omit]
       mutable _LastUnpinnedSpanPosition: Position
   }
  
positive.code:     /// Creates a `CharSpan` that contains the next `idxTo` characters of a `CharStream` from its position.
      /// On the dynamic block character stream, it ensures that the characters in the span stay in memory.
      [<CompiledName("PinSpan")>]
      let pinSpan cs ({CharStreamIndex.Index = idxTo}) = {
          LineFrom = cs.CurrentLine
          ColumnFrom = cs.CurrentColumn
          IndexFrom = cs.CurrentIndex
          IndexTo = idxTo
      }
  
  
negative.code: /// An continuous range of characters that is
  /// stored by its starting position and ending index.
  type CharSpan = private {
      StartingPosition: Position
      IndexTo: uint64
  }
  with
      /// The length of the span.
      /// It can never be zero.
      member x.Length = x.IndexTo - x.StartingPosition.Index + 1UL |> int
      override x.ToString() = sprintf "[%d,%d]" x.StartingPosition.Index x.IndexTo
  
  /// A type pointing to a character in a character stream.
  type [<Struct>] CharStreamIndex = private {Index: uint64}
  