anchor.diff:  
   let (>**) pattern text = (getRegEx pattern).IsMatch text
   
  +/// Checks wether the given char is a german umlaut.
   let isUmlaut c = List.exists ((=) c) ['ä'; 'ö'; 'ü'; 'Ä'; 'Ö'; 'Ü'; 'ß']
  +
  +/// Returns all standard chars and digits.
   let charsAndDigits = ['a'..'z'] @ ['A'..'Z'] @ ['0'..'9'] 
  +
  +/// Checks wether the given char is a standard char or digit.
   let isLetterOrDigit c = List.exists ((=) c) charsAndDigits
   
  +/// Trims the given string with the DirectorySeparatorChar
   let inline trimSeparator (s:string) = s.Trim Path.DirectorySeparatorChar
   
   let inline trimSpecialChars (s:string) =
  
positive.code:     fileNames 
        |> Seq.fold (fun builder file -> appendIfTrue (isNullOrEmpty file |> not) file builder) builder
  
  let directorySeparator = Path.DirectorySeparatorChar.ToString()
  
  let relativePaths = new Dictionary<_,_>()
  
  /// <summary>Produces relative path when possible to go from baseLocation to targetLocation.</summary>
  
negative.code: /// <exception cref="ArgumentNullException">base or target locations are null or empty</exception>
  let ProduceRelativePath baseLocation targetLocation =
      if isNullOrEmpty baseLocation then
          raise (new ArgumentNullException "baseLocation")
      
      if isNullOrEmpty targetLocation then
          raise (new ArgumentNullException "targetLocation")
  
      if not <| Path.IsPathRooted baseLocation then baseLocation else
      if not <| Path.IsPathRooted targetLocation then targetLocation else
  