anchor.diff:  [<RequireQualifiedAccess>]
   type Resolution =
   | Ok of PackageResolution
  -| Conflict of ResolvedPackage list * Set<PackageRequirement> * Set<PackageRequirement> * (PackageName -> SemVerInfo seq)
  +| Conflict of Set<ResolvedPackage> * Set<PackageRequirement> * Set<PackageRequirement> * (PackageName -> SemVerInfo seq)
       with
       member this.GetModelOrFail() =
           match this with
  
positive.code:                         let newOpen = calcOpenRequirements(exploredPackage,globalFrameworkRestrictions,versionToExplore,currentRequirement,closedRequirements,openRequirements)
                          let selectedVersions =
                              selectedPackageVersions 
                              |> List.filter (fun p -> p.Name <> exploredPackage.Name || p.Version <> exploredPackage.Version) // do we really need this line?
                          let newSelectedVersions = exploredPackage::selectedVersions
  
                          state := step (newFilteredVersions,newSelectedVersions,Set.add currentRequirement closedRequirements,newOpen)
                          allUnlisted := exploredPackage.Unlisted && !allUnlisted
  
negative.code:             exploredPackages.Add((dependency.Name,version),explored)
              explored
  
      let rec step (filteredVersions:Map<PackageName, (SemVerInfo list * bool)>,selectedPackageVersions:Set<ResolvedPackage>,closedRequirements:Set<PackageRequirement>,openRequirements:Set<PackageRequirement>) =
          if Set.isEmpty openRequirements then
              // we're done. re-check if we have a valid resolution and return it
              let isOk =
  