Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/ad6b761857274991c52c61ee35f6ea9d22ecc767

>---------------------------------------------------------------

commit ad6b761857274991c52c61ee35f6ea9d22ecc767
Author: Duncan Coutts <[email protected]>
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



_______________________________________________
Cvs-libraries mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-libraries

Reply via email to