anchor.diff:      /// Compares two instances of Microsoft.CodeAnalysis.Text.TextSpan
       static member CompareTo (a:TextSpan,b:TextSpan) = a.CompareTo b
   
  +
  +type TextLine with
  +
  +    member self.GetPosition (c:char) =
  +        let text = self.Text.ToString()
  +        match text.IndexOf c with
  +        | -1 -> None
  +        | x ->  Some (LinePosition (self.LineNumber,x))
  +
  +    member __.Contains (pos:int)  =
  +        __.Start <= pos && pos <= __.End
  +
  +        
  +    member self.InsertString (pos, str:string) =
  +        let chg = TextChange(TextSpan(pos,0),str)
  +        let moddedLine = self.Text.WithChanges(chg)
  +        TextLine.FromSpan(moddedLine,TextSpan.FromBounds(self.Start,self.Start+ moddedLine.Length))
  +
  +
  +
   type SourceText with
       
       member self.Text with get () = self.ToString()
  
positive.code:             elif line.Length > 0 then Some line
              else loop (reader.ReadLine())
          loop (reader.ReadLine())
  
  
  open System.Text
  
negative.code: [<RequireQualifiedAccess>]
  [<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
  module String =
  
      let inline toCharArray (str:string) = str.ToCharArray()
  
      let lowerCaseFirstChar (str: string) =
  