Cabal-1.24.0.0: A framework for packaging Haskell software

Portabilityportable
Maintainercabal-devel@haskell.org
Safe HaskellNone

Distribution.Package

Contents

Description

Defines a package identifier along with a parser and pretty printer for it. PackageIdentifiers consist of a name and an exact version. It also defines a Dependency data type. A dependency is a package name and a version range, like "foo >= 1.2 && < 2".

Synopsis

Package ids

newtype PackageName

Constructors

PackageName 

Fields

unPackageName :: String
 

data PackageIdentifier

The name and version of a package.

Constructors

PackageIdentifier 

Fields

pkgName :: PackageName

The name of this package, eg. foo

pkgVersion :: Version

the version of this package, eg 1.2

type PackageId = PackageIdentifier

Type alias so we can use the shorter name PackageId.

Package keys/installed package IDs (used for linker symbols)

data ComponentId

A ComponentId uniquely identifies the transitive source code closure of a component. For non-Backpack components, it also serves as the basis for install paths, symbols, etc.

Constructors

ComponentId String 

newtype UnitId

For now, there is no distinction between component IDs and unit IDs in Cabal.

Instances

Eq UnitId 
Data UnitId 
Ord UnitId 
Read UnitId 
Show UnitId 
Typeable UnitId 
Generic UnitId 
NFData UnitId 
Binary UnitId 
Text UnitId 

mkUnitId :: String -> UnitId

Makes a simple-style UnitId from a string.

mkLegacyUnitId :: PackageId -> UnitId

Make an old-style UnitId from a package identifier

getHSLibraryName :: UnitId -> String

Returns library name prefixed with HS, suitable for filenames

type InstalledPackageId = UnitId

Deprecated: Use UnitId instead

ABI hash

newtype AbiHash

Constructors

AbiHash String 

Instances

Eq AbiHash 
Read AbiHash 
Show AbiHash 
Generic AbiHash 
Binary AbiHash 
Text AbiHash 

Package source dependencies

data Dependency

Describes a dependency on a source package (API)

Instances

Package classes

class Package pkg where

Class of things that have a PackageIdentifier

Types in this class are all notions of a package. This allows us to have different types for the different phases that packages go though, from simple name/id, package description, configured or installed packages.

Not all kinds of packages can be uniquely identified by a PackageIdentifier. In particular, installed packages cannot, there may be many installed instances of the same source package.

Methods

packageId :: pkg -> PackageIdentifier

packageVersion :: Package pkg => pkg -> Version

class Package pkg => HasUnitId pkg where

Packages that have an installed package ID

Methods

installedUnitId :: pkg -> UnitId

installedPackageId :: HasUnitId pkg => pkg -> UnitId

Deprecated: Use installedUnitId instead

Compatibility wrapper for Cabal pre-1.24.

class HasUnitId pkg => PackageInstalled pkg where

Class of installed packages.

The primary data type which is an instance of this package is InstalledPackageInfo, but when we are doing install plans in Cabal install we may have other, installed package-like things which contain more metadata. Installed packages have exact dependencies installedDepends.

Methods

installedDepends :: pkg -> [UnitId]