Cabal-2.0.1.0: A framework for packaging Haskell software

Copyright | (c) The University of Glasgow 2004
Maintainer | libraries@haskell.org
Portability | portable
Safe Haskell | None
Language | Haskell2010

Distribution.InstalledPackageInfo

Description

This is the information about an installed package that is communicated to the `ghc-pkg` program in order to register a package. `ghc-pkg` now consumes this package format (as of version 6.4). This is specific to GHC at the moment.

The `.cabal` file format is for describing a package that is not yet installed. It has a lot of flexibility, like conditionals and dependency ranges. As such, that format is not at all suitable for describing a package that has already been built and installed. By the time we get to that stage, we have resolved all conditionals and resolved dependency version constraints to exact versions of dependent packages. So, this module defines the `InstalledPackageInfo` data structure that contains all the info we keep about an installed package. There is a parser and pretty printer. The textual format is rather simpler than the `.cabal` format: there are no sections, for example.

Synopsis

- data InstalledPackageInfo = InstalledPackageInfo {
  - sourcePackageId :: PackageId
  - installedUnitId :: UnitId
  - installedComponentId_ :: ComponentId
  - instantiatedWith :: [(ModuleName, OpenModule)]
  - sourceLibName :: Maybe UnqualComponentName
  - compatPackageKey :: String
  - license :: License
  - copyright :: String
  - maintainer :: String
  - author :: String
  - stability :: String
  - homepage :: String
  - pkgUrl :: String
  - synopsis :: String
  - description :: String
  - category :: String
  - abiHash :: AbiHash
  - indefinite :: Bool
  - exposed :: Bool
  - exposedModules :: [ExposedModule]
  - hiddenModules :: [ModuleName]
  - trusted :: Bool
  - importDirs :: [FilePath]
  - libraryDirs :: [FilePath]
  - libraryDynDirs :: [FilePath]
  - dataDir :: FilePath
  - hsLibraries :: [String]
  - extraLibraries :: [String]
  - extraGHCiLibraries :: [String]
  - includeDirs :: [FilePath]
  - includes :: [String]
  - depends :: [UnitId]
  - abiDepends :: [AbiDependency]
  - ccOptions :: [String]
  - ldOptions :: [String]
  - frameworkDirs :: [FilePath]
  - frameworks :: [String]
  - haddockInterfaces :: [FilePath]
  - haddockHTMLs :: [FilePath]
  - pkgRoot :: Maybe FilePath
  }
- installedPackageId :: InstalledPackageInfo -> UnitId
- installedComponentId :: InstalledPackageInfo -> ComponentId
- installedOpenUnitId :: InstalledPackageInfo -> OpenUnitId
- sourceComponentName :: InstalledPackageInfo -> ComponentName
- requiredSignatures :: InstalledPackageInfo -> Set ModuleName
- data ExposedModule = ExposedModule {
  - exposedName :: ModuleName
  - exposedReexport :: Maybe OpenModule
  }
- data AbiDependency = AbiDependency {
  - depUnitId :: UnitId
  - depAbiHash :: AbiHash
  }
- data ParseResult a
  - = ParseFailed PError
  - | ParseOk [PWarning] a
- data PError
  - = AmbiguousParse String LineNo
  - | NoParse String LineNo
  - | TabsError LineNo
  - | FromString String (Maybe LineNo)
- data PWarning
- emptyInstalledPackageInfo :: InstalledPackageInfo
- parseInstalledPackageInfo :: String -> ParseResult InstalledPackageInfo
- showInstalledPackageInfo :: InstalledPackageInfo -> String
- showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
- showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String)
- fieldsInstalledPackageInfo :: [FieldDescr InstalledPackageInfo]

# Documentation

data InstalledPackageInfo #

Constructors

InstalledPackageInfo |

Fields

- sourcePackageId :: PackageId
- installedUnitId :: UnitId
- installedComponentId_ :: ComponentId
- instantiatedWith :: [(ModuleName, OpenModule)]
- sourceLibName :: Maybe UnqualComponentName
- compatPackageKey :: String
- license :: License
- copyright :: String
- maintainer :: String
- author :: String
- stability :: String
- homepage :: String
- pkgUrl :: String
- synopsis :: String
- description :: String
- category :: String
- abiHash :: AbiHash
- indefinite :: Bool
- exposed :: Bool
- exposedModules :: [ExposedModule]
- hiddenModules :: [ModuleName]
- trusted :: Bool
- importDirs :: [FilePath]
- libraryDirs :: [FilePath]
- libraryDynDirs :: [FilePath]

  overrides `libraryDirs`

- dataDir :: FilePath
- hsLibraries :: [String]
- extraLibraries :: [String]
- extraGHCiLibraries :: [String]
- includeDirs :: [FilePath]
- includes :: [String]
- depends :: [UnitId]
- abiDepends :: [AbiDependency]
- ccOptions :: [String]
- ldOptions :: [String]
- frameworkDirs :: [FilePath]
- frameworks :: [String]
- haddockInterfaces :: [FilePath]
- haddockHTMLs :: [FilePath]
- pkgRoot :: Maybe FilePath

Instances

Eq InstalledPackageInfo # |
Methods (==) :: InstalledPackageInfo -> InstalledPackageInfo -> Bool # (/=) :: InstalledPackageInfo -> InstalledPackageInfo -> Bool #
Read InstalledPackageInfo # |
Methods readsPrec :: Int -> ReadS InstalledPackageInfo Source # readList :: ReadS [InstalledPackageInfo] Source # readPrec :: ReadPrec InstalledPackageInfo Source # readListPrec :: ReadPrec [InstalledPackageInfo] Source #
Show InstalledPackageInfo # |
Methods showsPrec :: Int -> InstalledPackageInfo -> ShowS Source # show :: InstalledPackageInfo -> String Source # showList :: [InstalledPackageInfo] -> ShowS Source #
Generic InstalledPackageInfo # |
Associated Types type Rep InstalledPackageInfo :: * -> * Source # Methods from :: InstalledPackageInfo -> Rep InstalledPackageInfo x Source # to :: Rep InstalledPackageInfo x -> InstalledPackageInfo Source #
Binary InstalledPackageInfo # |
Methods put :: InstalledPackageInfo -> Put Source # get :: Get InstalledPackageInfo Source # putList :: [InstalledPackageInfo] -> Put Source #
IsNode InstalledPackageInfo # |
Associated Types type Key InstalledPackageInfo :: * # Methods nodeKey :: InstalledPackageInfo -> Key InstalledPackageInfo # nodeNeighbors :: InstalledPackageInfo -> [Key InstalledPackageInfo] #
PackageInstalled InstalledPackageInfo # |
Methods installedDepends :: InstalledPackageInfo -> [UnitId] #
HasUnitId InstalledPackageInfo # |
Methods installedUnitId :: InstalledPackageInfo -> UnitId #
HasMungedPackageId InstalledPackageInfo # |
Methods mungedId :: InstalledPackageInfo -> MungedPackageId #
Package InstalledPackageInfo # |
Methods packageId :: InstalledPackageInfo -> PackageIdentifier #
Semigroup (PackageIndex InstalledPackageInfo) # |
Methods (<>) :: PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source # sconcat :: NonEmpty (PackageIndex InstalledPackageInfo) -> PackageIndex InstalledPackageInfo Source # stimes :: Integral b => b -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source #
Monoid (PackageIndex InstalledPackageInfo) # |
Methods mempty :: PackageIndex InstalledPackageInfo Source # mappend :: PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo -> PackageIndex InstalledPackageInfo Source # mconcat :: [PackageIndex InstalledPackageInfo] -> PackageIndex InstalledPackageInfo Source #
type Rep InstalledPackageInfo # |

type Rep InstalledPackageInfo = D1 * (MetaData "InstalledPackageInfo" "Distribution.InstalledPackageInfo" "Cabal-2.0.1.0" False) (C1 * (MetaCons "InstalledPackageInfo" PrefixI True) ((:*:) * ((:*:) * ((:*:) * ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "sourcePackageId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * PackageId)) (S1 * (MetaSel (Just Symbol "installedUnitId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * UnitId))) ((:*:) * (S1 * (MetaSel (Just Symbol "installedComponentId_") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * ComponentId)) ((:*:) * (S1 * (MetaSel (Just Symbol "instantiatedWith") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [(ModuleName, OpenModule)])) (S1 * (MetaSel (Just Symbol "sourceLibName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Maybe UnqualComponentName)))))) ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "compatPackageKey") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) (S1 * (MetaSel (Just Symbol "license") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * License))) ((:*:) * (S1 * (MetaSel (Just Symbol "copyright") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) ((:*:) * (S1 * (MetaSel (Just Symbol "maintainer") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) (S1 * (MetaSel (Just Symbol "author") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)))))) ((:*:) * ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "stability") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) (S1 * (MetaSel (Just Symbol "homepage") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String))) ((:*:) * (S1 * (MetaSel (Just Symbol "pkgUrl") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) ((:*:) * (S1 * (MetaSel (Just Symbol "synopsis") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) (S1 * (MetaSel (Just Symbol "description") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String))))) ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "category") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * String)) (S1 * (MetaSel (Just Symbol "abiHash") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * AbiHash))) ((:*:) * (S1 * (MetaSel (Just Symbol "indefinite") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Bool)) ((:*:) * (S1 * (MetaSel (Just Symbol "exposed") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Bool)) (S1 * (MetaSel (Just Symbol "exposedModules") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [ExposedModule]))))))) ((:*:) * ((:*:) * ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "hiddenModules") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [ModuleName])) (S1 * (MetaSel (Just Symbol "trusted") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Bool))) ((:*:) * (S1 * (MetaSel (Just Symbol "importDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])) ((:*:) * (S1 * (MetaSel (Just Symbol "libraryDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])) (S1 * (MetaSel (Just Symbol "libraryDynDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath]))))) ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "dataDir") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * FilePath)) (S1 * (MetaSel (Just Symbol "hsLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String]))) ((:*:) * (S1 * (MetaSel (Just Symbol "extraLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String])) ((:*:) * (S1 * (MetaSel (Just Symbol "extraGHCiLibraries") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String])) (S1 * (MetaSel (Just Symbol "includeDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])))))) ((:*:) * ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "includes") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String])) (S1 * (MetaSel (Just Symbol "depends") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [UnitId]))) ((:*:) * (S1 * (MetaSel (Just Symbol "abiDepends") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [AbiDependency])) ((:*:) * (S1 * (MetaSel (Just Symbol "ccOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String])) (S1 * (MetaSel (Just Symbol "ldOptions") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String]))))) ((:*:) * ((:*:) * (S1 * (MetaSel (Just Symbol "frameworkDirs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])) (S1 * (MetaSel (Just Symbol "frameworks") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [String]))) ((:*:) * (S1 * (MetaSel (Just Symbol "haddockInterfaces") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])) ((:*:) * (S1 * (MetaSel (Just Symbol "haddockHTMLs") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * [FilePath])) (S1 * (MetaSel (Just Symbol "pkgRoot") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Maybe FilePath))))))))))

type Key InstalledPackageInfo # |
type Key InstalledPackageInfo = UnitId

installedPackageId :: InstalledPackageInfo -> UnitId #

Deprecated: Use installedUnitId instead

Backwards compatibility with Cabal pre-1.24.

This type synonym is slightly awful because in cabal-install we define an `InstalledPackageId` but it's a ComponentId, not a UnitId!

installedComponentId :: InstalledPackageInfo -> ComponentId #

installedOpenUnitId :: InstalledPackageInfo -> OpenUnitId #

Get the indefinite unit identity representing this package. This IS NOT guaranteed to give you a substitution; for instantiated packages you will get `DefiniteUnitId (installedUnitId ipi)`. For indefinite libraries, however, you will correctly get an `OpenUnitId` with the appropriate `OpenModuleSubst`.

sourceComponentName :: InstalledPackageInfo -> ComponentName #

requiredSignatures :: InstalledPackageInfo -> Set ModuleName #

Returns the set of module names which need to be filled for an indefinite package, or the empty set if the package is definite.

data ExposedModule #

Constructors

ExposedModule |

Fields

- exposedName :: ModuleName
- exposedReexport :: Maybe OpenModule

Instances

Eq ExposedModule # |
Methods (==) :: ExposedModule -> ExposedModule -> Bool # (/=) :: ExposedModule -> ExposedModule -> Bool #
Read ExposedModule # |
Methods readsPrec :: Int -> ReadS ExposedModule Source # readList :: ReadS [ExposedModule] Source # readPrec :: ReadPrec ExposedModule Source # readListPrec :: ReadPrec [ExposedModule] Source #
Show ExposedModule # |
Methods showsPrec :: Int -> ExposedModule -> ShowS Source # show :: ExposedModule -> String Source # showList :: [ExposedModule] -> ShowS Source #
Generic ExposedModule # |
Associated Types type Rep ExposedModule :: * -> * Source # Methods from :: ExposedModule -> Rep ExposedModule x Source # to :: Rep ExposedModule x -> ExposedModule Source #
Binary ExposedModule # |
Methods put :: ExposedModule -> Put Source # get :: Get ExposedModule Source # putList :: [ExposedModule] -> Put Source #
Text ExposedModule # |
Methods disp :: ExposedModule -> Doc # parse :: ReadP r ExposedModule #
type Rep ExposedModule # |

type Rep ExposedModule = D1 * (MetaData "ExposedModule" "Distribution.InstalledPackageInfo" "Cabal-2.0.1.0" False) (C1 * (MetaCons "ExposedModule" PrefixI True) ((:*:) * (S1 * (MetaSel (Just Symbol "exposedName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * ModuleName)) (S1 * (MetaSel (Just Symbol "exposedReexport") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Maybe OpenModule)))))

data AbiDependency #

An ABI dependency is a dependency on a library which also records the ABI hash (`abiHash`) of the library it depends on.

The primary utility of this is to enable an extra sanity when GHC loads libraries: it can check if the dependency has a matching ABI and if not, refuse to load this library. This information is critical if we are shadowing libraries; differences in the ABI hash let us know what packages get shadowed by the new version of a package.

Constructors

AbiDependency |

Fields

- depUnitId :: UnitId
- depAbiHash :: AbiHash

Instances

Eq AbiDependency # |
Methods (==) :: AbiDependency -> AbiDependency -> Bool # (/=) :: AbiDependency -> AbiDependency -> Bool #
Read AbiDependency # |
Methods readsPrec :: Int -> ReadS AbiDependency Source # readList :: ReadS [AbiDependency] Source # readPrec :: ReadPrec AbiDependency Source # readListPrec :: ReadPrec [AbiDependency] Source #
Show AbiDependency # |
Methods showsPrec :: Int -> AbiDependency -> ShowS Source # show :: AbiDependency -> String Source # showList :: [AbiDependency] -> ShowS Source #
Generic AbiDependency # |
Associated Types type Rep AbiDependency :: * -> * Source # Methods from :: AbiDependency -> Rep AbiDependency x Source # to :: Rep AbiDependency x -> AbiDependency Source #
Binary AbiDependency # |
Methods put :: AbiDependency -> Put Source # get :: Get AbiDependency Source # putList :: [AbiDependency] -> Put Source #
Text AbiDependency # |
Methods disp :: AbiDependency -> Doc # parse :: ReadP r AbiDependency #
type Rep AbiDependency # |
type Rep AbiDependency = D1 * (MetaData "AbiDependency" "Distribution.InstalledPackageInfo" "Cabal-2.0.1.0" False) (C1 * (MetaCons "AbiDependency" PrefixI True) ((:*:) * (S1 * (MetaSel (Just Symbol "depUnitId") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * UnitId)) (S1 * (MetaSel (Just Symbol "depAbiHash") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * AbiHash))))

data ParseResult a #

Constructors

ParseFailed PError |
ParseOk [PWarning] a |

Instances

Monad ParseResult # |
Methods (>>=) :: ParseResult a -> (a -> ParseResult b) -> ParseResult b Source # (>>) :: ParseResult a -> ParseResult b -> ParseResult b Source # return :: a -> ParseResult a Source # fail :: String -> ParseResult a Source #
Functor ParseResult # |
Methods fmap :: (a -> b) -> ParseResult a -> ParseResult b Source # (<$) :: a -> ParseResult b -> ParseResult a Source #
MonadFail ParseResult # |
Methods fail :: String -> ParseResult a Source #
Applicative ParseResult # |
Methods pure :: a -> ParseResult a Source # (<*>) :: ParseResult (a -> b) -> ParseResult a -> ParseResult b Source # liftA2 :: (a -> b -> c) -> ParseResult a -> ParseResult b -> ParseResult c Source # (*>) :: ParseResult a -> ParseResult b -> ParseResult b Source # (<*) :: ParseResult a -> ParseResult b -> ParseResult a Source #
Show a => Show (ParseResult a) # |
Methods showsPrec :: Int -> ParseResult a -> ShowS Source # show :: ParseResult a -> String Source # showList :: [ParseResult a] -> ShowS Source #

data PError #

Constructors

AmbiguousParse String LineNo |
NoParse String LineNo |
TabsError LineNo |
FromString String (Maybe LineNo) |

Instances

Eq PError # |
Methods (==) :: PError -> PError -> Bool # (/=) :: PError -> PError -> Bool #
Show PError # |
Methods showsPrec :: Int -> PError -> ShowS Source # show :: PError -> String Source # showList :: [PError] -> ShowS Source #

data PWarning #

Instances

Eq PWarning # |
Methods (==) :: PWarning -> PWarning -> Bool # (/=) :: PWarning -> PWarning -> Bool #
Show PWarning # |
Methods showsPrec :: Int -> PWarning -> ShowS Source # show :: PWarning -> String Source # showList :: [PWarning] -> ShowS Source #

emptyInstalledPackageInfo :: InstalledPackageInfo #

parseInstalledPackageInfo :: String -> ParseResult InstalledPackageInfo #

showInstalledPackageInfo :: InstalledPackageInfo -> String #

showInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String) #

showSimpleInstalledPackageInfoField :: String -> Maybe (InstalledPackageInfo -> String) #

fieldsInstalledPackageInfo :: [FieldDescr InstalledPackageInfo] #