anchor.diff:              |> Array.map Async.Choice
               |> Async.Parallel
               |> Async.RunSynchronously
  -    
  +
           versionResponse
           |> Array.zip sources
  -        |> Array.choose (fun ((_,s),v) -> 
  +        |> Array.choose (fun ((_,s),v) ->
               match v with
  -            | Some v when Array.isEmpty v |> not -> 
  +            | Some v when Array.isEmpty v |> not ->
                   try
                       let errorFile = getVersionsFailedCacheFileName s
                       if errorFile.Exists then
                           File.Delete(errorFile.FullName)
                   with _ -> ()
                   Some (s,v)
  -            | _ -> 
  +            | _ ->
                   try
                       let errorFile = getVersionsFailedCacheFileName s
                       if errorFile.Exists |> not then
  
positive.code: 
          File.Delete(fileName)
  
          return 
              { PackageName = nuspec.OfficialName
                DownloadUrl = packageName.ToString()
                Dependencies = nuspec.Dependencies
  
negative.code:     }
  
  
  let tryGetAllVersionsFromNugetODataWithFilter (auth, nugetURL, package:PackageName) =
      async {
          try
              let url = sprintf "%s/Packages?$filter=toLower(Id) eq '%s'" nugetURL (package.GetCompareString())
              verbosefn "getAllVersionsFromNugetODataWithFilter from url '%s'" url
              let! result = followODataLink auth url
              return Some result
          with _ -> return None
      }
  
  let tryGetPackageVersionsViaOData (auth, nugetURL, package:PackageName) =
      async {
          try
              let url = sprintf "%s/FindPackagesById()?id='%O'" nugetURL package
              verbosefn "getAllVersionsFromNugetOData from url '%s'" url
              let! result = followODataLink auth url
  