anchor.diff:              line := reader.ReadLine()
           |]
   
  +    open System.Text
  +    /// Use an accumulation function to create a new string applying a transformation
  +    /// to every non-empty line in the string
  +    let mapNonEmptyLines (folder: StringBuilder -> string -> StringBuilder) (str: string) =
  +        let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt folder
  +        use reader = new StringReader (str)
  +        let sb = StringBuilder ()
  +        let mutable line = reader.ReadLine ()
  +        while isNotNull line do
  +            if line.Length > 0 then
  +                f.Invoke (sb,line) |> ignore
  +            line <- reader.ReadLine()
  +        string sb
  +
  +    /// Parse a string to find the first nonempty line
  +    /// Return null if the string was null or only contained empty lines
  +    let firstNonEmptyLine (str: string) =
  +        use reader = new StringReader (str)
  +        let rec loop (line:string) =
  +            if isNull line then None 
  +            elif  line.Length > 0 then Some line
  +            else loop (reader.ReadLine())
  +        loop (reader.ReadLine())
  +
   module Reflection =
       open System.Reflection
   
  
positive.code:             state <- folder.Invoke (state, i, array.[i])
          state
  
      open System.Collections.Generic
  
      /// Returns an array that contains no duplicate entries according to generic hash and
  
negative.code:                | "" -> str, None
                 | index -> str.Substring (0, str.Length - index.Length), Some (int index)
  
      /// Remove all trailing and leading whitespace from the string
      /// return null if the string is null
      let trim (value: string) = match value with null -> null | x -> x.Trim()
      
      let split options (separator: string[]) (value: string) = 
  