never executed always true always false
1 {-# LANGUAGE DeriveFunctor #-}
2 {-# LANGUAGE DeriveGeneric #-}
3 module Distribution.Client.Types.PackageSpecifier (
4 PackageSpecifier (..),
5 pkgSpecifierTarget,
6 pkgSpecifierConstraints,
7 ) where
8
9 import Distribution.Client.Compat.Prelude
10 import Prelude ()
11
12 import Distribution.Package (Package (..), packageName, packageVersion)
13 import Distribution.Types.PackageName (PackageName)
14 import Distribution.Version (thisVersion)
15
16 import Distribution.Solver.Types.ConstraintSource
17 import Distribution.Solver.Types.LabeledPackageConstraint
18 import Distribution.Solver.Types.PackageConstraint
19
20 -- | A fully or partially resolved reference to a package.
21 --
22 data PackageSpecifier pkg =
23
24 -- | A partially specified reference to a package (either source or
25 -- installed). It is specified by package name and optionally some
26 -- required properties. Use a dependency resolver to pick a specific
27 -- package satisfying these properties.
28 --
29 NamedPackage PackageName [PackageProperty]
30
31 -- | A fully specified source package.
32 --
33 | SpecificSourcePackage pkg
34 deriving (Eq, Show, Functor, Generic)
35
36 instance Binary pkg => Binary (PackageSpecifier pkg)
37 instance Structured pkg => Structured (PackageSpecifier pkg)
38
39 pkgSpecifierTarget :: Package pkg => PackageSpecifier pkg -> PackageName
40 pkgSpecifierTarget (NamedPackage name _) = name
41 pkgSpecifierTarget (SpecificSourcePackage pkg) = packageName pkg
42
43 pkgSpecifierConstraints :: Package pkg
44 => PackageSpecifier pkg -> [LabeledPackageConstraint]
45 pkgSpecifierConstraints (NamedPackage name props) = map toLpc props
46 where
47 toLpc prop = LabeledPackageConstraint
48 (PackageConstraint (scopeToplevel name) prop)
49 ConstraintSourceUserTarget
50 pkgSpecifierConstraints (SpecificSourcePackage pkg) =
51 [LabeledPackageConstraint pc ConstraintSourceUserTarget]
52 where
53 pc = PackageConstraint
54 (ScopeTarget $ packageName pkg)
55 (PackagePropertyVersion $ thisVersion (packageVersion pkg))