anchor.diff:  
           let! requested =
             resolver.PostAndAsyncReply (fun channel -> GetCandidates (constraints, (p, cs), locations, channel))
  -        let candidates = requested |> AsyncSeq.cache
   
           let fetched =
  -          candidates
  +          requested
             |> AsyncSeq.mapAsync(fun candidate -> async {
               match candidate with
               | Result.Error e ->
  
positive.code: 
      let result =
        resolutions
        |> AsyncSeq.map (fun s ->
          Resolution.Ok <| {Resolutions = s.Selections |> Map.map(fun k v -> (v, Solution.empty))}
        )
  
negative.code:   | Conflicts of Set<SearchStrategyError>
  
    type ResolutionRequest =
    | MarkBadPath of List<ResolutionPath> * PackageConstraint * SearchStrategyError * AsyncReplyChannel<Unit>
    | GetCandidates of Constraints * PackageConstraint * PackageSources * AsyncReplyChannel<AsyncSeq<Result<(PackageIdentifier * LocatedVersionSet), SearchStrategyError>>>
  
    type SearchStrategy = ISourceExplorer -> SolverState -> AsyncSeq<Result<PackageIdentifier * LocatedVersionSet, SearchStrategyError>>
  