From 445ad90d5ccf1c67055e712df25528ac99ad10af Mon Sep 17 00:00:00 2001
From: Edsko de Vries <edsko@well-typed.com>
Date: Thu, 19 Feb 2015 17:04:49 +0100
Subject: [PATCH] Move PackageFixedDeps from Cabal to cabal-install

The fundamental difference between Cabal and cabal-install is that the former
deals with installed libraries, and -- in principle -- knows about _library_
dependencies only, whereas the latters deals with setup, executable, test-suite
and benchmark dependencies in addition to library dependencies. Currently we
classify all of these simply as 'dependencies' but that will change shortly.

In this commit we take a first step towards this by moving the PackageFixedDeps
class, which deals with dependencies of packages rather than installed
libraries, from Cabal to cabal-install.

The commit is pretty simple; we just move the type class and update import
statements where necessary.
---
 Cabal/Distribution/Package.hs                       | 11 -----------
 Cabal/Distribution/Simple/GHC/IPI641.hs             |  2 +-
 Cabal/Distribution/Simple/GHC/IPI642.hs             |  2 +-
 .../Distribution/Client/Dependency/TopDown.hs       |  5 +++--
 .../Client/Dependency/TopDown/Constraints.hs        |  5 +++--
 .../Distribution/Client/Dependency/TopDown/Types.hs |  4 +++-
 cabal-install/Distribution/Client/Install.hs        |  4 +++-
 cabal-install/Distribution/Client/InstallPlan.hs    |  4 +++-
 cabal-install/Distribution/Client/PackageIndex.hs   | 13 ++++++++++++-
 cabal-install/Distribution/Client/Types.hs          |  4 ++--
 10 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/Cabal/Distribution/Package.hs b/Cabal/Distribution/Package.hs
index f36a4ce8c5..70cd70adb4 100644
--- a/Cabal/Distribution/Package.hs
+++ b/Cabal/Distribution/Package.hs
@@ -38,7 +38,6 @@ module Distribution.Package (
 
         -- * Package classes
         Package(..), packageName, packageVersion,
-        PackageFixedDeps(..),
         PackageInstalled(..),
   ) where
 
@@ -360,16 +359,6 @@ packageVersion  = pkgVersion . packageId
 instance Package PackageIdentifier where
   packageId = id
 
--- | Subclass of packages that have specific versioned dependencies.
---
--- So for example a not-yet-configured package has dependencies on version
--- ranges, not specific versions. A configured or an already installed package
--- depends on exact versions. Some operations or data structures (like
---  dependency graphs) only make sense on this subclass of package types.
---
-class Package pkg => PackageFixedDeps pkg where
-  depends :: pkg -> [PackageIdentifier]
-
 -- | Class of installed packages.
 --
 -- The primary data type which is an instance of this package is
diff --git a/Cabal/Distribution/Simple/GHC/IPI641.hs b/Cabal/Distribution/Simple/GHC/IPI641.hs
index 84cda21f61..4bb995dea1 100644
--- a/Cabal/Distribution/Simple/GHC/IPI641.hs
+++ b/Cabal/Distribution/Simple/GHC/IPI641.hs
@@ -14,7 +14,7 @@ module Distribution.Simple.GHC.IPI641 (
   ) where
 
 import qualified Distribution.InstalledPackageInfo as Current
-import qualified Distribution.Package as Current hiding (depends, installedPackageId)
+import qualified Distribution.Package as Current hiding (installedPackageId)
 import Distribution.Text (display)
 
 import Distribution.Simple.GHC.IPI642
diff --git a/Cabal/Distribution/Simple/GHC/IPI642.hs b/Cabal/Distribution/Simple/GHC/IPI642.hs
index 512949c164..25145f1ab1 100644
--- a/Cabal/Distribution/Simple/GHC/IPI642.hs
+++ b/Cabal/Distribution/Simple/GHC/IPI642.hs
@@ -19,7 +19,7 @@ module Distribution.Simple.GHC.IPI642 (
   ) where
 
 import qualified Distribution.InstalledPackageInfo as Current
-import qualified Distribution.Package as Current hiding (depends, installedPackageId)
+import qualified Distribution.Package as Current hiding (installedPackageId)
 import qualified Distribution.License as Current
 
 import Distribution.Version (Version)
diff --git a/cabal-install/Distribution/Client/Dependency/TopDown.hs b/cabal-install/Distribution/Client/Dependency/TopDown.hs
index b7f3a7be03..9c6cf314d5 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown.hs
@@ -33,11 +33,12 @@ import Distribution.Client.Dependency.Types
          , Progress(..), foldProgress )
 
 import qualified Distribution.Client.PackageIndex as PackageIndex
-import Distribution.Client.PackageIndex (PackageIndex)
+import Distribution.Client.PackageIndex
+         ( PackageIndex, PackageFixedDeps(depends) )
 import Distribution.Package
          ( PackageName(..), PackageId, Package(..), packageVersion, packageName
          , Dependency(Dependency), thisPackageVersion
-         , simplifyDependency, PackageFixedDeps(depends) )
+         , simplifyDependency )
 import Distribution.PackageDescription
          ( PackageDescription(buildDepends) )
 import Distribution.Client.PackageUtils
diff --git a/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs b/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
index 006288c1a1..00004bcdcf 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs
@@ -26,11 +26,12 @@ module Distribution.Client.Dependency.TopDown.Constraints (
 
 import Distribution.Client.Dependency.TopDown.Types
 import qualified Distribution.Client.PackageIndex as PackageIndex
-import Distribution.Client.PackageIndex (PackageIndex)
+import Distribution.Client.PackageIndex
+        ( PackageIndex, PackageFixedDeps(depends) )
 import Distribution.Package
          ( PackageName, PackageId, PackageIdentifier(..)
          , Package(packageId), packageName, packageVersion
-         , Dependency, PackageFixedDeps(depends) )
+         , Dependency )
 import Distribution.Version
          ( Version )
 import Distribution.Client.Utils
diff --git a/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs b/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
index 43567c81c3..dc480e36b9 100644
--- a/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
+++ b/cabal-install/Distribution/Client/Dependency/TopDown/Types.hs
@@ -14,10 +14,12 @@ module Distribution.Client.Dependency.TopDown.Types where
 
 import Distribution.Client.Types
          ( SourcePackage(..), InstalledPackage, OptionalStanza )
+import Distribution.Client.PackageIndex
+         ( PackageFixedDeps(depends) )
 
 import Distribution.Package
          ( PackageIdentifier, Dependency
-         , Package(packageId), PackageFixedDeps(depends) )
+         , Package(packageId) )
 import Distribution.PackageDescription
          ( FlagAssignment )
 
diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs
index b7d66c455f..cfebe26e54 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -90,6 +90,8 @@ import Distribution.Client.BuildReports.Types
          ( ReportLevel(..) )
 import Distribution.Client.SetupWrapper
          ( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions )
+import Distribution.Client.PackageIndex
+         ( PackageFixedDeps(..) )
 import qualified Distribution.Client.BuildReports.Anonymous as BuildReports
 import qualified Distribution.Client.BuildReports.Storage as BuildReports
          ( storeAnonymous, storeLocal, fromInstallPlan, fromPlanningFailure )
@@ -128,7 +130,7 @@ import Distribution.Simple.InstallDirs as InstallDirs
          , initialPathTemplateEnv, installDirsTemplateEnv )
 import Distribution.Package
          ( PackageIdentifier(..), PackageId, packageName, packageVersion
-         , Package(..), PackageFixedDeps(..), PackageKey
+         , Package(..), PackageKey
          , Dependency(..), thisPackageVersion, InstalledPackageId, installedPackageId )
 import qualified Distribution.PackageDescription as PackageDescription
 import Distribution.PackageDescription
diff --git a/cabal-install/Distribution/Client/InstallPlan.hs b/cabal-install/Distribution/Client/InstallPlan.hs
index 9376d7152e..04434978b7 100644
--- a/cabal-install/Distribution/Client/InstallPlan.hs
+++ b/cabal-install/Distribution/Client/InstallPlan.hs
@@ -54,7 +54,7 @@ import Distribution.Client.Types
          , InstalledPackage(..), fakeInstalledPackageId )
 import Distribution.Package
          ( PackageIdentifier(..), PackageName(..), Package(..), packageName
-         , PackageFixedDeps(..), Dependency(..), InstalledPackageId
+         , Dependency(..), InstalledPackageId
          , PackageInstalled(..) )
 import Distribution.Version
          ( Version, withinRange )
@@ -63,6 +63,8 @@ import Distribution.PackageDescription
          , Flag(flagName), FlagName(..) )
 import Distribution.Client.PackageUtils
          ( externalBuildDepends )
+import Distribution.Client.PackageIndex
+         ( PackageFixedDeps(..) )
 import Distribution.PackageDescription.Configuration
          ( finalizePackageDescription )
 import Distribution.Simple.PackageIndex
diff --git a/cabal-install/Distribution/Client/PackageIndex.hs b/cabal-install/Distribution/Client/PackageIndex.hs
index 4a4a70857c..3a4a974dd1 100644
--- a/cabal-install/Distribution/Client/PackageIndex.hs
+++ b/cabal-install/Distribution/Client/PackageIndex.hs
@@ -15,6 +15,7 @@
 module Distribution.Client.PackageIndex (
   -- * Package index data type
   PackageIndex,
+  PackageFixedDeps(..),
 
   -- * Creating an index
   fromList,
@@ -72,11 +73,21 @@ import Data.Maybe (isJust, isNothing, fromMaybe, catMaybes)
 import Distribution.Package
          ( PackageName(..), PackageIdentifier(..)
          , Package(..), packageName, packageVersion
-         , Dependency(Dependency), PackageFixedDeps(..) )
+         , Dependency(Dependency) )
 import Distribution.Version
          ( Version, withinRange )
 import Distribution.Simple.Utils (lowercase, equating, comparing)
 
+-- | Subclass of packages that have specific versioned dependencies.
+--
+-- So for example a not-yet-configured package has dependencies on version
+-- ranges, not specific versions. A configured or an already installed package
+-- depends on exact versions. Some operations or data structures (like
+--  dependency graphs) only make sense on this subclass of package types.
+--
+class Package pkg => PackageFixedDeps pkg where
+  depends :: pkg -> [PackageIdentifier]
+
 
 -- | The collection of information about packages from one or more 'PackageDB's.
 --
diff --git a/cabal-install/Distribution/Client/Types.hs b/cabal-install/Distribution/Client/Types.hs
index 8cd7fb08da..37da68bd9a 100644
--- a/cabal-install/Distribution/Client/Types.hs
+++ b/cabal-install/Distribution/Client/Types.hs
@@ -15,7 +15,7 @@
 module Distribution.Client.Types where
 
 import Distribution.Package
-         ( PackageName, PackageId, Package(..), PackageFixedDeps(..)
+         ( PackageName, PackageId, Package(..)
          , mkPackageKey, PackageKey, InstalledPackageId(..)
          , PackageInstalled(..) )
 import Distribution.InstalledPackageInfo
@@ -26,7 +26,7 @@ import Distribution.PackageDescription
 import Distribution.PackageDescription.Configuration
          ( mapTreeData )
 import Distribution.Client.PackageIndex
-         ( PackageIndex )
+         ( PackageIndex, PackageFixedDeps(..) )
 import Distribution.Version
          ( VersionRange )
 import Distribution.Simple.Compiler
-- 
GitLab