anchor.diff:          CharStream.Create(str.AsMemory())
       /// Creates a `CharStream` that lazily reads from a `TextReader`.
       /// The size of the stream's internal character buffer can be optionally specified.
  +    /// `CharStreams` made from this function must be `Dispose`d.
  +    /// The `TextReader` inside must be separately disposed as well.
       static member Create(reader, [<Optional; DefaultParameterValue(256)>] bufferSize: int) =
           if bufferSize <= 0 then
               invalidArg "bufferSize" "The buffer size cannot be negative."
  
positive.code:     let mutable buffer = Array.zeroCreate bufferSize
      let mutable bufferFirstCharacterIndex = 0UL
      let mutable nextReadIndex = 0UL
      member private _.CheckDisposed() =
          if isNull buffer then
              raise <| ObjectDisposedException("Cannot use a dynamic block character stream after being disposed.")
      member private _.BufferContentLength = nextReadIndex - bufferFirstCharacterIndex |> int
      override db.LengthSoFar =
          db.CheckDisposed()
          nextReadIndex
      override db.TryExpandPastIndex(startingIndex, idx) =
          db.CheckDisposed()
          // The character we want to read is already in memory. Easy stuff.
          if idx < nextReadIndex then
              true
  
negative.code:                     Array.blit buffer importantCharStart buffer 0 importantCharLength
                      bufferFirstCharacterIndex <- startingIndex
                  else
                      // Otherwise we make the buffer larger.
                      growBuffer (buffer.Length * 2)
              let bufferContentLength = db.BufferContentLength
              // It's now time to read more characters.
              let nRead = reader.Read(buffer, bufferContentLength, buffer.Length - bufferContentLength)
  