anchor.diff:  let inline ensureDirectory dir = 
       directoryInfo dir |> ensureDirExists
   
  -/// Detects whether it the given path is a directory
  +/// Detects whether the given path is a directory.
   let isDirectory path =
       let attr = File.GetAttributes path
       attr &&& FileAttributes.Directory = FileAttributes.Directory
   
  -/// Detects whether it the given path is a file
  +/// Detects whethert the given path is a file.
   let isFile path = isDirectory path |> not
positive.code:         then upcast directoryInfo path
          else upcast fileInfo path
  
  /// Converts a filename to it's full file system name
  let inline FullName fileName = Path.GetFullPath fileName
  
  /// Gets the directory part of a filename
  let inline DirectoryName fileName = Path.GetDirectoryName fileName
  
  /// Gets all subdirectories
  let inline subDirectories (dir:DirectoryInfo) = dir.GetDirectories()
  
  /// Gets all files in the directory
  let inline filesInDir (dir:DirectoryInfo) = dir.GetFiles()
  
  /// Finds all the files in the directory matching the search pattern 
  let filesInDirMatching pattern (dir:DirectoryInfo) =
      if dir.Exists then dir.GetFiles pattern else [||]
  
  /// Gets the first file in the directory matching the search pattern or None
  let TryFindFirstMatchingFile pattern dir =
      dir 
      |> directoryInfo
      |> filesInDirMatching pattern
      |> fun files -> if Seq.isEmpty files then None else (Seq.head files).FullName |> Some
  
  /// Gets the first file in the directory matching the search pattern or throws if nothing was found
  let FindFirstMatchingFile pattern dir =
      match TryFindFirstMatchingFile pattern dir with
      | Some x -> x
  
negative.code:         new FileNotFoundException(sprintf "Could not find file matching %s in %s" pattern dir)
            |> raise
  
  /// Gets the current directory.
  let currentDirectory = Path.GetFullPath "."
  
  /// Get the full location of the current assembly.
  let fullAssemblyPath = System.Reflection.Assembly.GetAssembly(typeof<RegistryBaseKey>).Location
  
  /// Checks if the file exists on disk.
  let fileExists fileName = File.Exists fileName
  
  /// Raises an exception if the file doesn't exist on disk.
  let checkFileExists fileName =
      if not <| fileExists fileName then
          new FileNotFoundException(sprintf "File %s does not exist." fileName)
            |> raise
  
  /// Checks if all given files exist.
  let allFilesExist files = Seq.forall fileExists files
  
  /// Normalizes a filename.
  