Skip to content

Commit d877695

Browse files
Move most solver code to new module namespace
1 parent e215922 commit d877695

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+704
-531
lines changed

cabal-install/Distribution/Client/BuildReports/Storage.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ import Distribution.Client.BuildReports.Anonymous (BuildReport)
2828

2929
import Distribution.Client.Types
3030
import qualified Distribution.Client.InstallPlan as InstallPlan
31-
import qualified Distribution.Client.ComponentDeps as CD
3231
import Distribution.Client.InstallPlan
3332
( InstallPlan )
3433

34+
import qualified Distribution.Solver.Types.ComponentDeps as CD
35+
import Distribution.Solver.Types.SourcePackage
36+
3537
import Distribution.Package
3638
( PackageId, packageId )
3739
import Distribution.PackageDescription

cabal-install/Distribution/Client/Configure.hs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ import qualified Distribution.Client.InstallPlan as InstallPlan
2626
import Distribution.Client.InstallPlan (SolverInstallPlan)
2727
import Distribution.Client.IndexUtils as IndexUtils
2828
( getSourcePackages, getInstalledPackages )
29-
import Distribution.Client.PackageIndex ( PackageIndex, elemByPackageName )
30-
import Distribution.Client.PkgConfigDb (PkgConfigDb, readPkgConfigDb)
3129
import Distribution.Client.Setup
3230
( ConfigExFlags(..), configureCommand, filterConfigureFlags
3331
, RepoContext(..) )
@@ -36,10 +34,17 @@ import Distribution.Client.SetupWrapper
3634
( setupWrapper, SetupScriptOptions(..), defaultSetupScriptOptions )
3735
import Distribution.Client.Targets
3836
( userToPackageConstraint, userConstraintPackageName )
39-
import qualified Distribution.Client.ComponentDeps as CD
4037
import Distribution.Package (PackageId)
4138
import Distribution.Client.JobControl (Lock)
4239

40+
import qualified Distribution.Solver.Types.ComponentDeps as CD
41+
import Distribution.Solver.Types.OptionalStanza
42+
import Distribution.Solver.Types.PackageIndex
43+
( PackageIndex, elemByPackageName )
44+
import Distribution.Solver.Types.PkgConfigDb
45+
(PkgConfigDb, readPkgConfigDb)
46+
import Distribution.Solver.Types.SourcePackage
47+
4348
import Distribution.Simple.Compiler
4449
( Compiler, CompilerInfo, compilerInfo, PackageDB(..), PackageDBStack )
4550
import Distribution.Simple.Program (ProgramConfiguration )
@@ -292,7 +297,7 @@ planLocalPackage verbosity comp platform configFlags configExFlags
292297
let -- We create a local package and ask to resolve a dependency on it
293298
localPkg = SourcePackage {
294299
packageInfoId = packageId pkg,
295-
Source.packageDescription = pkg,
300+
packageDescription = pkg,
296301
packageSource = LocalUnpackedPackage ".",
297302
packageDescrOverride = Nothing
298303
}

cabal-install/Distribution/Client/Dependency.hs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,34 +63,26 @@ module Distribution.Client.Dependency (
6363

6464
import Distribution.Client.Dependency.TopDown
6565
( topDownResolver )
66-
import Distribution.Client.Dependency.Modular
66+
import Distribution.Solver.Modular
6767
( modularResolver, SolverConfig(..) )
68-
import qualified Distribution.Client.PackageIndex as PackageIndex
6968
import Distribution.Simple.PackageIndex (InstalledPackageIndex)
7069
import qualified Distribution.Simple.PackageIndex as InstalledPackageIndex
7170
import qualified Distribution.Client.InstallPlan as InstallPlan
7271
import Distribution.Client.InstallPlan (SolverInstallPlan)
73-
import Distribution.Client.PkgConfigDb (PkgConfigDb)
7472
import Distribution.Client.Types
75-
( SourcePackageDb(SourcePackageDb), SourcePackage(..)
76-
, SolverPackage(..), SolverId(..)
73+
( SourcePackageDb(SourcePackageDb)
7774
, UnresolvedPkgLoc, UnresolvedSourcePackage
78-
, OptionalStanza(..), enableStanzas )
75+
, enableStanzas )
7976
import Distribution.Client.Dependency.Types
8077
( PreSolver(..), Solver(..), DependencyResolver, ResolverPackage(..)
81-
, ReorderGoals(..), IndependentGoals(..), AvoidReinstalls(..)
82-
, ShadowPkgs(..), StrongFlags(..), EnableBackjumping(..)
8378
, PackageConstraint(..), showPackageConstraint
8479
, LabeledPackageConstraint(..), unlabelPackageConstraint
8580
, ConstraintSource(..), showConstraintSource
8681
, PackagePreferences(..), InstalledPreference(..)
87-
, PackagesPreferenceDefault(..)
88-
, Progress(..), foldProgress )
82+
, PackagesPreferenceDefault(..) )
8983
import Distribution.Client.Sandbox.Types
9084
( SandboxPackageInfo(..) )
9185
import Distribution.Client.Targets
92-
import Distribution.Client.ComponentDeps (ComponentDeps)
93-
import qualified Distribution.Client.ComponentDeps as CD
9486
import qualified Distribution.InstalledPackageInfo as Installed
9587
import Distribution.Package
9688
( PackageName(..), PackageIdentifier(PackageIdentifier), PackageId
@@ -122,6 +114,17 @@ import Distribution.Text
122114
import Distribution.Verbosity
123115
( Verbosity )
124116

117+
import Distribution.Solver.Types.ComponentDeps (ComponentDeps)
118+
import qualified Distribution.Solver.Types.ComponentDeps as CD
119+
import Distribution.Solver.Types.OptionalStanza
120+
import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
121+
import Distribution.Solver.Types.PkgConfigDb (PkgConfigDb)
122+
import Distribution.Solver.Types.Progress
123+
import Distribution.Solver.Types.Settings
124+
import Distribution.Solver.Types.SolverId
125+
import Distribution.Solver.Types.SolverPackage
126+
import Distribution.Solver.Types.SourcePackage
127+
125128
import Data.List
126129
( foldl', sort, sortBy, nubBy, maximumBy, intercalate, nub )
127130
import Data.Function (on)

cabal-install/Distribution/Client/Dependency/Modular/Configured.hs

Lines changed: 0 additions & 13 deletions
This file was deleted.

cabal-install/Distribution/Client/Dependency/TopDown.hs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,16 @@ import qualified Distribution.Client.Dependency.TopDown.Constraints as Constrain
2020
import Distribution.Client.Dependency.TopDown.Constraints
2121
( Satisfiable(..) )
2222
import Distribution.Client.Types
23-
( SourcePackage(..), SolverPackage(..)
24-
, UnresolvedPkgLoc, UnresolvedSourcePackage
25-
, enableStanzas, SolverId(..) )
23+
( UnresolvedPkgLoc
24+
, UnresolvedSourcePackage, enableStanzas )
2625
import Distribution.Client.Dependency.Types
2726
( DependencyResolver, ResolverPackage(..)
2827
, PackageConstraint(..), unlabelPackageConstraint
29-
, PackagePreferences(..), InstalledPreference(..)
30-
, Progress(..), foldProgress )
28+
, PackagePreferences(..), InstalledPreference(..) )
3129

32-
import qualified Distribution.Client.PackageIndex as PackageIndex
3330
import qualified Distribution.Simple.PackageIndex as InstalledPackageIndex
3431
import Distribution.Simple.PackageIndex (InstalledPackageIndex)
3532
import qualified Distribution.InstalledPackageInfo as InstalledPackageInfo
36-
import Distribution.Client.ComponentDeps
37-
( ComponentDeps )
38-
import qualified Distribution.Client.ComponentDeps as CD
39-
import Distribution.Client.PackageIndex
40-
( PackageIndex )
4133
import Distribution.Package
4234
( PackageName(..), PackageId, PackageIdentifier(..)
4335
, UnitId(..), ComponentId(..)
@@ -61,6 +53,15 @@ import Distribution.Simple.Utils
6153
import Distribution.Text
6254
( display )
6355

56+
import Distribution.Solver.Types.ComponentDeps ( ComponentDeps )
57+
import qualified Distribution.Solver.Types.ComponentDeps as CD
58+
import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
59+
import Distribution.Solver.Types.PackageIndex ( PackageIndex )
60+
import Distribution.Solver.Types.Progress
61+
import Distribution.Solver.Types.SolverId
62+
import Distribution.Solver.Types.SolverPackage
63+
import Distribution.Solver.Types.SourcePackage
64+
6465
import Data.List
6566
( foldl', maximumBy, minimumBy, nub, sort, sortBy, groupBy )
6667
import Data.Maybe

cabal-install/Distribution/Client/Dependency/TopDown/Constraints.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ module Distribution.Client.Dependency.TopDown.Constraints (
2525
) where
2626

2727
import Distribution.Client.Dependency.TopDown.Types
28-
import qualified Distribution.Client.PackageIndex as PackageIndex
29-
import Distribution.Client.PackageIndex
30-
( PackageIndex )
3128
import Distribution.Package
3229
( PackageName, PackageId, PackageIdentifier(..)
3330
, Package(packageId), packageName, packageVersion
@@ -37,6 +34,9 @@ import Distribution.Version
3734
import Distribution.Client.Utils
3835
( mergeBy, MergeResult(..) )
3936

37+
import qualified Distribution.Solver.Types.PackageIndex as PackageIndex
38+
import Distribution.Solver.Types.PackageIndex ( PackageIndex )
39+
4040
#if !MIN_VERSION_base(4,8,0)
4141
import Data.Monoid
4242
( Monoid(mempty) )

cabal-install/Distribution/Client/Dependency/TopDown/Types.hs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
module Distribution.Client.Dependency.TopDown.Types where
1515

1616
import Distribution.Client.Types
17-
( UnresolvedPkgLoc, UnresolvedSourcePackage
18-
, OptionalStanza, SolverPackage(..), SolverId(..) )
17+
( UnresolvedPkgLoc, UnresolvedSourcePackage )
1918
import Distribution.InstalledPackageInfo
2019
( InstalledPackageInfo )
21-
import qualified Distribution.Client.ComponentDeps as CD
20+
21+
import qualified Distribution.Solver.Types.ComponentDeps as CD
22+
import Distribution.Solver.Types.OptionalStanza
23+
import Distribution.Solver.Types.SolverPackage
24+
import Distribution.Solver.Types.SolverId
2225

2326
import Distribution.Package
2427
( PackageId, PackageIdentifier, Dependency

cabal-install/Distribution/Client/Dependency/Types.hs

Lines changed: 7 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ module Distribution.Client.Dependency.Types (
1818
PreSolver(..),
1919
Solver(..),
2020

21-
ReorderGoals(..),
22-
IndependentGoals(..),
23-
AvoidReinstalls(..),
24-
ShadowPkgs(..),
25-
StrongFlags(..),
26-
EnableBackjumping(..),
27-
2821
DependencyResolver,
2922
ResolverPackage(..),
3023

@@ -34,9 +27,6 @@ module Distribution.Client.Dependency.Types (
3427
InstalledPreference(..),
3528
PackagesPreferenceDefault(..),
3629

37-
Progress(..),
38-
foldProgress,
39-
4030
LabeledPackageConstraint(..),
4131
ConstraintSource(..),
4232
unlabelPackageConstraint,
@@ -48,8 +38,6 @@ module Distribution.Client.Dependency.Types (
4838
import Control.Applicative
4939
( Applicative(..) )
5040
#endif
51-
import Control.Applicative
52-
( Alternative(..) )
5341

5442
import Data.Char
5543
( isAlpha, toLower )
@@ -58,21 +46,20 @@ import Data.Monoid
5846
( Monoid(..) )
5947
#endif
6048

61-
import Distribution.Client.PkgConfigDb
62-
( PkgConfigDb )
63-
import Distribution.Client.Types
64-
( OptionalStanza(..), SourcePackage(..), SolverPackage )
49+
import Distribution.Solver.Types.OptionalStanza
50+
import Distribution.Solver.Types.PkgConfigDb ( PkgConfigDb )
51+
import Distribution.Solver.Types.PackageIndex ( PackageIndex )
52+
import Distribution.Solver.Types.Progress
53+
import Distribution.Solver.Types.SourcePackage
54+
import Distribution.Solver.Types.SolverPackage
6555

6656
import qualified Distribution.Compat.ReadP as Parse
6757
( pfail, munch1 )
6858
import Distribution.PackageDescription
6959
( FlagAssignment, FlagName(..) )
7060
import Distribution.InstalledPackageInfo
7161
( InstalledPackageInfo )
72-
import qualified Distribution.Client.PackageIndex as PackageIndex
73-
( PackageIndex )
7462
import Distribution.Simple.PackageIndex ( InstalledPackageIndex )
75-
import Distribution.Simple.Setup ( BooleanFlag(..) )
7663
import Distribution.Package
7764
( PackageName )
7865
import Distribution.Version
@@ -115,30 +102,6 @@ instance Text PreSolver where
115102
"choose" -> return Choose
116103
_ -> Parse.pfail
117104

118-
newtype ReorderGoals = ReorderGoals Bool
119-
deriving (BooleanFlag, Eq, Generic, Show)
120-
121-
newtype IndependentGoals = IndependentGoals Bool
122-
deriving (BooleanFlag, Eq, Generic, Show)
123-
124-
newtype AvoidReinstalls = AvoidReinstalls Bool
125-
deriving (BooleanFlag, Eq, Generic, Show)
126-
127-
newtype ShadowPkgs = ShadowPkgs Bool
128-
deriving (BooleanFlag, Eq, Generic, Show)
129-
130-
newtype StrongFlags = StrongFlags Bool
131-
deriving (BooleanFlag, Eq, Generic, Show)
132-
133-
newtype EnableBackjumping = EnableBackjumping Bool
134-
deriving (BooleanFlag, Eq, Generic, Show)
135-
136-
instance Binary ReorderGoals
137-
instance Binary IndependentGoals
138-
instance Binary AvoidReinstalls
139-
instance Binary ShadowPkgs
140-
instance Binary StrongFlags
141-
142105
-- | A dependency resolver is a function that works out an installation plan
143106
-- given the set of installed and available packages and a set of deps to
144107
-- solve for.
@@ -150,7 +113,7 @@ instance Binary StrongFlags
150113
type DependencyResolver loc = Platform
151114
-> CompilerInfo
152115
-> InstalledPackageIndex
153-
-> PackageIndex.PackageIndex (SourcePackage loc)
116+
-> PackageIndex (SourcePackage loc)
154117
-> PkgConfigDb
155118
-> (PackageName -> PackagePreferences)
156119
-> [LabeledPackageConstraint]
@@ -247,41 +210,6 @@ data PackagesPreferenceDefault =
247210
| PreferLatestForSelected
248211
deriving Show
249212

250-
-- | A type to represent the unfolding of an expensive long running
251-
-- calculation that may fail. We may get intermediate steps before the final
252-
-- result which may be used to indicate progress and\/or logging messages.
253-
--
254-
data Progress step fail done = Step step (Progress step fail done)
255-
| Fail fail
256-
| Done done
257-
deriving (Functor)
258-
259-
-- | Consume a 'Progress' calculation. Much like 'foldr' for lists but with two
260-
-- base cases, one for a final result and one for failure.
261-
--
262-
-- Eg to convert into a simple 'Either' result use:
263-
--
264-
-- > foldProgress (flip const) Left Right
265-
--
266-
foldProgress :: (step -> a -> a) -> (fail -> a) -> (done -> a)
267-
-> Progress step fail done -> a
268-
foldProgress step fail done = fold
269-
where fold (Step s p) = step s (fold p)
270-
fold (Fail f) = fail f
271-
fold (Done r) = done r
272-
273-
instance Monad (Progress step fail) where
274-
return = pure
275-
p >>= f = foldProgress Step Fail f p
276-
277-
instance Applicative (Progress step fail) where
278-
pure a = Done a
279-
p <*> x = foldProgress Step Fail (flip fmap x) p
280-
281-
instance Monoid fail => Alternative (Progress step fail) where
282-
empty = Fail mempty
283-
p <|> q = foldProgress Step (const q) Done p
284-
285213
-- | 'PackageConstraint' labeled with its source.
286214
data LabeledPackageConstraint
287215
= LabeledPackageConstraint PackageConstraint ConstraintSource

cabal-install/Distribution/Client/Fetch.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@ import Distribution.Client.Dependency
2222
import Distribution.Client.IndexUtils as IndexUtils
2323
( getSourcePackages, getInstalledPackages )
2424
import qualified Distribution.Client.InstallPlan as InstallPlan
25-
import Distribution.Client.PkgConfigDb
26-
( PkgConfigDb, readPkgConfigDb )
2725
import Distribution.Client.Setup
2826
( GlobalFlags(..), FetchFlags(..), RepoContext(..) )
2927

28+
import Distribution.Solver.Types.PkgConfigDb ( PkgConfigDb, readPkgConfigDb )
29+
import Distribution.Solver.Types.SolverPackage
30+
import Distribution.Solver.Types.SourcePackage
31+
3032
import Distribution.Package
3133
( packageId )
3234
import Distribution.Simple.Compiler

cabal-install/Distribution/Client/Freeze.hs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ import Distribution.Client.IndexUtils as IndexUtils
2727
import Distribution.Client.InstallPlan
2828
( SolverInstallPlan, SolverPlanPackage )
2929
import qualified Distribution.Client.InstallPlan as InstallPlan
30-
import Distribution.Client.PkgConfigDb
31-
( PkgConfigDb, readPkgConfigDb )
3230
import Distribution.Client.Setup
3331
( GlobalFlags(..), FreezeFlags(..), ConfigExFlags(..)
3432
, RepoContext(..) )
@@ -38,6 +36,11 @@ import Distribution.Client.Sandbox.PackageEnvironment
3836
import Distribution.Client.Sandbox.Types
3937
( SandboxPackageInfo(..) )
4038

39+
import Distribution.Solver.Types.OptionalStanza
40+
import Distribution.Solver.Types.PkgConfigDb
41+
( PkgConfigDb, readPkgConfigDb )
42+
import Distribution.Solver.Types.SolverId
43+
4144
import Distribution.Package
4245
( Package, packageId, packageName, packageVersion, installedUnitId )
4346
import Distribution.Simple.Compiler

cabal-install/Distribution/Client/Get.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import Distribution.Client.Compat.Process
4343
import Distribution.Compat.Exception
4444
( catchIO )
4545

46+
import Distribution.Solver.Types.SourcePackage
47+
4648
import Control.Exception
4749
( finally )
4850
import Control.Monad

0 commit comments

Comments
 (0)