[commit: Cabal] master: Move common dependency resolver types into shared module (41a8d7a)
Ian Lynagh
igloo at earth.li
Fri Jun 24 01:54:13 CEST 2011
Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/41a8d7a45bcdf228889b6af5d47c393d481e0649
>---------------------------------------------------------------
commit 41a8d7a45bcdf228889b6af5d47c393d481e0649
Author: Duncan Coutts <duncan at haskell.org>
Date: Wed May 28 21:50:49 2008 +0000
Move common dependency resolver types into shared module
>---------------------------------------------------------------
cabal-install/Hackage/Dependency.hs | 15 +++-----
cabal-install/Hackage/Dependency/Bogus.hs | 15 ++-------
cabal-install/Hackage/Dependency/Naive.hs | 10 ++----
cabal-install/Hackage/Dependency/Types.hs | 48 +++++++++++++++++++++++++++++
cabal-install/cabal-install.cabal | 1 +
5 files changed, 61 insertions(+), 28 deletions(-)
diff --git a/cabal-install/Hackage/Dependency.hs b/cabal-install/Hackage/Dependency.hs
index 91ef270..f1b3078 100644
--- a/cabal-install/Hackage/Dependency.hs
+++ b/cabal-install/Hackage/Dependency.hs
@@ -25,6 +25,8 @@ import qualified Hackage.InstallPlan as InstallPlan
import Hackage.InstallPlan (InstallPlan)
import Hackage.Types
( UnresolvedDependency(..), AvailablePackage(..) )
+import Hackage.Dependency.Types
+ ( DependencyResolver )
import Distribution.Package
( PackageIdentifier(..), packageVersion, packageName
, Dependency(..), Package(..), PackageFixedDeps(..) )
@@ -41,6 +43,9 @@ import Data.List (maximumBy)
import Data.Monoid (Monoid(mempty))
import Control.Exception (assert)
+defaultResolver :: DependencyResolver a
+defaultResolver = naiveResolver
+
resolveDependencies :: OS
-> Arch
-> CompilerId
@@ -49,7 +54,7 @@ resolveDependencies :: OS
-> [UnresolvedDependency]
-> Either [Dependency] (InstallPlan a)
resolveDependencies os arch comp (Just installed) available deps =
- dependencyResolver naiveResolver
+ dependencyResolver defaultResolver
os arch comp installed available deps
resolveDependencies os arch comp Nothing available deps =
@@ -70,14 +75,6 @@ hideBasePackage :: Package p => PackageIndex p -> PackageIndex p
hideBasePackage = PackageIndex.deletePackageName "base"
. PackageIndex.deletePackageName "ghc-prim"
-type DependencyResolver a = OS
- -> Arch
- -> CompilerId
- -> PackageIndex InstalledPackageInfo
- -> PackageIndex AvailablePackage
- -> [UnresolvedDependency]
- -> Either [Dependency] [InstallPlan.PlanPackage a]
-
dependencyResolver
:: DependencyResolver a
-> OS -> Arch -> CompilerId
diff --git a/cabal-install/Hackage/Dependency/Bogus.hs b/cabal-install/Hackage/Dependency/Bogus.hs
index 58f4127..09b4727 100644
--- a/cabal-install/Hackage/Dependency/Bogus.hs
+++ b/cabal-install/Hackage/Dependency/Bogus.hs
@@ -17,19 +17,16 @@ module Hackage.Dependency.Bogus (
import qualified Distribution.Simple.PackageIndex as PackageIndex
import Distribution.Simple.PackageIndex (PackageIndex)
-import Distribution.InstalledPackageInfo (InstalledPackageInfo)
import qualified Hackage.InstallPlan as InstallPlan
import Hackage.Types
( UnresolvedDependency(..), AvailablePackage(..)
, ConfiguredPackage(..) )
+import Hackage.Dependency.Types
+ ( DependencyResolver )
import Distribution.Package
( PackageIdentifier(..), Dependency(..), Package(..) )
import Distribution.PackageDescription.Configuration
( finalizePackageDescription)
-import Distribution.Compiler
- ( CompilerId )
-import Distribution.System
- ( OS, Arch )
import Distribution.Simple.Utils (comparing)
import Data.List (maximumBy)
@@ -39,13 +36,7 @@ import Data.List (maximumBy)
-- We need this for hugs and nhc98 which do not track installed packages.
-- We just pretend that everything is installed and hope for the best.
--
-bogusResolver :: OS
- -> Arch
- -> CompilerId
- -> PackageIndex InstalledPackageInfo
- -> PackageIndex AvailablePackage
- -> [UnresolvedDependency]
- -> Either [Dependency] [InstallPlan.PlanPackage a]
+bogusResolver :: DependencyResolver a
bogusResolver os arch comp _ available deps =
case unzipEithers (map resolveFromAvailable deps) of
(ok, []) -> Right ok
diff --git a/cabal-install/Hackage/Dependency/Naive.hs b/cabal-install/Hackage/Dependency/Naive.hs
index cac1ea6..e3bf9e1 100644
--- a/cabal-install/Hackage/Dependency/Naive.hs
+++ b/cabal-install/Hackage/Dependency/Naive.hs
@@ -24,6 +24,8 @@ import qualified Hackage.InstallPlan as InstallPlan
import Hackage.Types
( UnresolvedDependency(..), AvailablePackage(..)
, ConfiguredPackage(..) )
+import Hackage.Dependency.Types
+ ( DependencyResolver )
import Distribution.Package
( PackageIdentifier(..), Dependency(..), Package(..) )
import Distribution.PackageDescription
@@ -44,13 +46,7 @@ import Data.List (maximumBy)
import Data.Maybe (fromMaybe)
import Data.Monoid (Monoid(mappend))
-naiveResolver :: OS
- -> Arch
- -> CompilerId
- -> PackageIndex InstalledPackageInfo
- -> PackageIndex AvailablePackage
- -> [UnresolvedDependency]
- -> Either [Dependency] [InstallPlan.PlanPackage a]
+naiveResolver :: DependencyResolver a
naiveResolver os arch comp installed available deps =
packagesToInstall installed
[ resolveDependency os arch comp installed available dep flags
diff --git a/cabal-install/Hackage/Dependency/Types.hs b/cabal-install/Hackage/Dependency/Types.hs
new file mode 100644
index 0000000..155c326
--- /dev/null
+++ b/cabal-install/Hackage/Dependency/Types.hs
@@ -0,0 +1,48 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : Hackage.Dependency.Types
+-- Copyright : (c) Duncan Coutts 2008
+-- License : BSD-like
+--
+-- Maintainer : cabal-devel at haskell.org
+-- Stability : provisional
+-- Portability : portable
+--
+-- Common types for dependency resolution.
+-----------------------------------------------------------------------------
+module Hackage.Dependency.Types (
+ DependencyResolver,
+ ) where
+
+import Hackage.Types
+ ( UnresolvedDependency(..), AvailablePackage(..) )
+import qualified Hackage.InstallPlan as InstallPlan
+
+import Distribution.Package
+ ( Dependency )
+import Distribution.InstalledPackageInfo
+ ( InstalledPackageInfo )
+import Distribution.Simple.PackageIndex
+ ( PackageIndex )
+import Distribution.Compiler
+ ( CompilerId )
+import Distribution.System
+ ( OS, Arch )
+
+import Prelude hiding (fail)
+
+-- | A dependency resolver is a function that works out an installation plan
+-- given the set of installed and available packages and a set of deps to
+-- solve for.
+--
+-- The reason for this interface is because there are dozens of approaches to
+-- solving the package dependency problem and we want to make it easy to swap
+-- in alternatives.
+--
+type DependencyResolver a = OS
+ -> Arch
+ -> CompilerId
+ -> PackageIndex InstalledPackageInfo
+ -> PackageIndex AvailablePackage
+ -> [UnresolvedDependency]
+ -> Either [Dependency] [InstallPlan.PlanPackage a]
diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal
index f508a08..8707639 100644
--- a/cabal-install/cabal-install.cabal
+++ b/cabal-install/cabal-install.cabal
@@ -41,6 +41,7 @@ Executable cabal
Hackage.Dependency
Hackage.Dependency.Bogus
Hackage.Dependency.Naive
+ Hackage.Dependency.Types
Hackage.Fetch
Hackage.HttpUtils
Hackage.IndexUtils
More information about the Cvs-libraries
mailing list