[commit: Cabal] master: Change the result type of DependencyResolver (0ef0660)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:53:44 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/0ef06600ad03abf6346adca88a6c925d695fbdf9
>---------------------------------------------------------------
commit 0ef06600ad03abf6346adca88a6c925d695fbdf9
Author: Duncan Coutts <duncan at haskell.org>
Date: Fri May 9 14:28:07 2008 +0000
Change the result type of DependencyResolver
and add a wrapper that makes InstallPlans
>---------------------------------------------------------------
cabal-install/Hackage/Dependency.hs | 30 ++++++++++++++++++++++--------
1 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/cabal-install/Hackage/Dependency.hs b/cabal-install/Hackage/Dependency.hs
index 64c49bf..a147bc7 100644
--- a/cabal-install/Hackage/Dependency.hs
+++ b/cabal-install/Hackage/Dependency.hs
@@ -81,23 +81,37 @@ hideBrokenPackages index =
. map (packageId . fst)
$ PackageIndex.brokenPackages index
-{-
type DependencyResolver a = OS
-> Arch
-> CompilerId
-> PackageIndex InstalledPackageInfo
-> PackageIndex AvailablePackage
-> [UnresolvedDependency]
- -> InstallPlan.InstallPlan a
+ -> Either [InstallPlan.PlanPackage a] [Dependency]
--- | This is an example resolver that produces valid plans but plans where we
--- say that every package failed.
+dependencyResolver
+ :: DependencyResolver a
+ -> OS -> Arch -> CompilerId
+ -> PackageIndex InstalledPackageInfo
+ -> PackageIndex AvailablePackage
+ -> [UnresolvedDependency]
+ -> Either (InstallPlan a) [Dependency]
+dependencyResolver resolver os arch comp installed available deps =
+ case resolver os arch comp (hideBrokenPackages installed) available deps of
+ Left pkgs ->
+ case InstallPlan.new os arch comp (PackageIndex.fromList pkgs) of
+ Left plan -> Left plan
+ Right problems -> error $ unlines $
+ "internal error: could not construct a valid install plan."
+ : "The proposed (invalid) plan contained the following problems:"
+ : map InstallPlan.showPlanProblem problems
+ Right unresolved -> Right unresolved
+
+-- | This is an example resolver that says that every package failed.
--
failingResolver :: DependencyResolver a
-failingResolver os arch compiler _ _ deps =
- InstallPlan.new os arch compiler $
- PackageIndex.fromList (map InstallPlan.Unresolved deps)
--}
+failingResolver _ _ _ _ _ deps = Right
+ [ dep | UnresolvedDependency dep _ <- deps ]
resolveDependency :: OS
-> Arch
More information about the Cvs-libraries
mailing list