anchor.diff:              //keyNotFound ""
               raise <| System.Collections.Generic.KeyNotFoundException ()
   
  -    /// Applies the given function to each character in the substring,
  -    /// in order from lowest to highest indices.
  +    /// <summary>Applies the given function to each character in the substring, in order from lowest to highest indices.</summary>
  +    /// <param name="action"></param>
  +    /// <param name="substr"></param>
  +    /// <returns></returns>
       [<CompiledName("Iterate")>]
       let iter action (substr : substring) : unit =
           let len = substr.Length
           for i = 0 to len - 1 do
               action substr.[i]
   
  +    /// <summary>
       /// Applies the given function to each character in the substring,
       /// in order from lowest to highest indices.
       /// The integer index applied to the function is the character's index within the substring.
  +    /// </summary>
  +    /// <param name="action"></param>
  +    /// <param name="substr"></param>
  +    /// <returns></returns>
       [<CompiledName("IterateIndexed")>]
       let iteri action (substr : substring) : unit =
           // OPTIMIZATION : Immediately return if the substring is empty.
  
positive.code: 
          trimStartWith predicate (trimEndWith predicate substr)
  
      /// Removes all leading occurrences of the specified set of characters from a substring.
      [<CompiledName("TrimStart")>]
      let trimStart (chars : char[]) (substr : substring) =
          // Preconditions
  
negative.code:         *)
  
  
  /// <summary>
  /// Extension methods for <see cref="System.String"/> and <see cref="System.Text.StringBuilder"/>
  /// which provide integration with the substring type.
  /// </summary>
  module SubstringExtensions =
      type System.String with
          /// <summary>Returns a new substring created from this string and the given starting and ending indices.</summary>
          /// <param name="startIndex"></param>
          /// <param name="finishIndex"></param>
          /// <returns></returns>
          member this.GetSlice (startIndex, finishIndex) : substring =
              let startIndex = defaultArg startIndex 0 
              let finishIndex = defaultArg finishIndex this.Length
              substring (this, startIndex, finishIndex - startIndex + 1)
  
      type System.Text.StringBuilder with
          /// <summary>Appends a copy of the specified substring to this instance.</summary>
          /// <param name="substr"></param>
          /// <returns></returns>
          member this.Append (value : substring) : System.Text.StringBuilder =
              // OPTIMIZATION : If the substring is empty, return immediately.
              if value.IsEmpty then this
              else
                  this.Append (value.String, value.Offset, value.Length)
              
          /// <summary>Appends a copy of the specified substring to this instance, appending a newline.</summary>
          /// <param name="value"></param>
          /// <returns></returns>
          member this.AppendLine (value : substring) : System.Text.StringBuilder =
              let this = this.Append value
              this.AppendLine ()
  
      type System.Text.RegularExpressions.Regex with
          /// <summary>Searches the input substring for the first occurrence of a regular expression.</summary>
          /// <param name="value"></param>
          /// <returns></returns>
          member this.Match (value : substring) =
              this.Match (value.String, value.Offset, value.Length)
  