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

On branch  : master

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

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

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



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

Reply via email to