anchor.diff:      /// The stream's current position.
       member x.Position = x._Position
       /// The stream's character at its current position.
  +    /// Calling this function assumes that this character is actually `read`.
       member x.FirstCharacter = x.Source.[x.Position.Index]
       /// Returns the length of the input; or at least the
       /// length of the input that has ever crossed the memory.
  
positive.code:         /// The `TextReader` that powers the stream.
          Reader: TextReader
          /// A temporary buffer of characters that are read from the reader
          /// and are going to be read to be generated.
          mutable Buffer: char[]
          /// The index of the first element in the buffer.
          mutable BufferStartingIndex: uint64
  
negative.code:                 idx <- CharStreamIndex <| idx.Index + GenericOne
                  true
              elif idx.Index = db.NextReadIndex then
                  if db.BufferContentLength = db.Buffer.Length then
                      if db.BufferStartingIndex <> cs.StartingIndex then
                          Array.blit
                              db.Buffer
                              (int <| cs.StartingIndex - db.BufferStartingIndex)
                              db.Buffer
                              0
                              (int <| db.NextReadIndex - cs.StartingIndex)
                          db.BufferStartingIndex <- cs.StartingIndex
                      else
                          Array.Resize(&db.Buffer, db.Buffer.Length * 2)
  