Cabal- A framework for packaging Haskell software

CopyrightIsaac Jones 2003-2004
Safe HaskellNone




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".


Package ids

type PackageId = PackageIdentifier Source

Type alias so we can use the shorter name PackageId.

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

data ComponentId Source

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.


ComponentId String 

newtype UnitId Source

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

mkUnitId :: String -> UnitId Source

Makes a simple-style UnitId from a string.

mkLegacyUnitId :: PackageId -> UnitId Source

Make an old-style UnitId from a package identifier

getHSLibraryName :: UnitId -> String Source

Returns library name prefixed with HS, suitable for filenames

type InstalledPackageId = UnitId Source

Deprecated: Use UnitId instead

ABI hash

Package source dependencies

Package classes

class Package pkg where Source

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.

class Package pkg => HasUnitId pkg where Source

Packages that have an installed package ID


installedUnitId :: pkg -> UnitId Source

installedPackageId :: HasUnitId pkg => pkg -> UnitId Source

Deprecated: Use installedUnitId instead

Compatibility wrapper for Cabal pre-1.24.

class HasUnitId pkg => PackageInstalled pkg where Source

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.


installedDepends :: pkg -> [UnitId] Source