| Cabal-1.8.0.6: A framework for packaging Haskell software | Contents | Index

Distribution.Package

Portability | portable
Maintainer | cabal-devel@haskell.org

Contents

Package ids
Installed package identifiers
Package source dependencies
Package classes

Description
Defines a package identifier along with a parser and pretty printer for it. `PackageIdentifier`s 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

newtype PackageName = PackageName String

data PackageIdentifier = PackageIdentifier {

pkgName :: PackageName
pkgVersion :: Version

}

type PackageId = PackageIdentifier
newtype InstalledPackageId = InstalledPackageId String
data Dependency = Dependency PackageName VersionRange
thisPackageVersion :: PackageIdentifier -> Dependency
notThisPackageVersion :: PackageIdentifier -> Dependency
simplifyDependency :: Dependency -> Dependency
class Package pkg where

packageId :: pkg -> PackageIdentifier

packageName :: Package pkg => pkg -> PackageName
packageVersion :: Package pkg => pkg -> Version
class Package pkg => PackageFixedDeps pkg where

depends :: pkg -> [PackageIdentifier]

Package ids
newtype PackageName

Constructors

PackageName String |

Instances

Eq PackageName
Ord PackageName
Read PackageName
Show PackageName
Text PackageName

data PackageIdentifier

The name and version of a package.
Constructors

PackageIdentifier |

pkgName :: PackageName | The name of this package, eg. foo
pkgVersion :: Version | the version of this package, eg 1.2

Instances

Eq PackageIdentifier
Ord PackageIdentifier
Read PackageIdentifier
Show PackageIdentifier
Text PackageIdentifier
Package PackageIdentifier

type PackageId = PackageIdentifier
Type alias so we can use the shorter name PackageId.
Installed package identifiers
newtype InstalledPackageId

An InstalledPackageId uniquely identifies an instance of an installed package. There can be at most one package with a given `InstalledPackageId` in a package database, or overlay of databases.
Constructors

InstalledPackageId String |

Instances

Eq InstalledPackageId
Ord InstalledPackageId
Read InstalledPackageId
Show InstalledPackageId
Text InstalledPackageId

Package source dependencies
data Dependency

Describes a dependency on a source package (API)
Constructors

Dependency PackageName VersionRange |

Instances

Eq Dependency
Read Dependency
Show Dependency
Text Dependency

thisPackageVersion :: PackageIdentifier -> Dependency
notThisPackageVersion :: PackageIdentifier -> Dependency
simplifyDependency :: Dependency -> Dependency
Simplify the `VersionRange` expression in a `Dependency`. See `simplifyVersionRange`.
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

Instances

Package PackageIdentifier
Package GenericPackageDescription
Package PackageDescription
Package (InstalledPackageInfo_ str)

packageName :: Package pkg => pkg -> PackageName
packageVersion :: Package pkg => pkg -> Version
class Package pkg => PackageFixedDeps pkg where

Subclass of packages that have specific versioned dependencies. So for example a not-yet-configured package has dependencies on version ranges, not specific versions. A configured or an already installed package depends on exact versions. Some operations or data structures (like dependency graphs) only make sense on this subclass of package types.
Methods

depends :: pkg -> [PackageIdentifier]

Produced by Haddock version 2.6.1