anchor.diff:          files |> Array.map hashedFile |> Array.choose id
   
       /// Get SHA1-hashes with label and elapsed calculation time for each given file.
  -    let GetFileSHA1 verbose files = 
  +    let GetFilesSHA1 verbose files = 
           files
           |> GetFilesHashedDiagnostic verbose [|"SHA1", HashAlgorithm.Create("SHA1")|] 
           |> Array.map (fun (h,f) -> 
               let h_ms, h_t, h_hash = h.[0]
               (h_ms, h_t, h_hash, f))
   
  +    /// Get SHA1-hashes with label and elapsed calculation time for the given file.
  +    let GetFileSHA1 verbose file = [|file|] |> GetFilesSHA1 verbose
  +
       /// Get SHA1-grouping of the given files.
       let GetFilesGroupedBySHA1 verbose files = 
           files
  -        |> GetFileSHA1 verbose 
  +        |> GetFilesSHA1 verbose 
           |> Seq.ofArray 
           |> Seq.groupBy (fun (_,_,h,_) -> h) 
           
       /// Coerce a sequence of files using hard links.
  +    let private pDel verbose h msg = if verbose then printfn "Delete error %s\n%s" h msg
  +    let private pHL verbose h msg = if verbose then printfn "Hard link error %s\n%s" h msg
       let rec CoerceFilesIntoHardLinks verbose (files : seq<string>) = 
           if files |> Seq.isEmpty then ()
           else 
  
positive.code: 
  module Directory = 
      /// Get all transformed files of a directory by extension.
      let rec GetFilesTransformed transform caseSensitive ext dir =
          let files =  try Directory.GetFiles dir with | _ -> [||]
          let dirs = try Directory.GetDirectories dir with | _ -> [||]
          seq { for file in files do
                    if caseSensitive then 
                        if file.EndsWith(ext) then 
                            yield (transform file)
                    else
                        if file.ToLowerInvariant().EndsWith(ext.ToLowerInvariant()) then 
                            yield (transform file)
                for sub in dirs do
                    yield! GetFilesTransformed transform caseSensitive ext sub }
  
  
  module Utils =
  
negative.code:             if tail |> Seq.isEmpty then ()
              else
                  let head2 = Seq.head tail
                  if (try File.Delete(head2); true with | _ as ex -> pDel verbose head2 ex.Message; false) then
                      (try CreateHardLink head2 head with | _ as ex -> pHL verbose head2 ex.Message; false) |> ignore
                  let tail2 = tail |> Seq.skip 1
                  if tail2 |> Seq.isEmpty then ()
                  else CoerceFilesIntoHardLinks verbose (seq { yield head; yield! tail2 })
  