Spec-Zone.ru › Haskell 7

GHC.PackageDb

Авторские права (c) Университет Глазго 2009, Данкан Каутс 2014
Поддержка ghc-devs@haskell.org
Переносимость переносимый
Безопасный Haskell Нет
Язык Haskell2010

Описание

Этот модуль предоставляет представление базы данных зарегистрированных пакетов GHC, которое используется как компилятором/библиотекой GHC, так и программой ghc-pkg. Он определяет формат базы данных, используемый GHC и ghc-pkg.

Формат базы данных и эта библиотека построены таким образом, чтобы GHC не зависел от библиотеки Cabal. Программа ghc-pkg выступает в качестве шлюза между внешним форматом пакета (определяемым Cabal) и внутренним форматом пакета, специализированным для GHC.

Компилятор GHC нуждается только в части информации о зарегистрированных пакетах, такой как имена модулей, различные пути и т. д. С другой стороны, ghc-pkg должен сохранять всю информацию из пакетов Cabal и уметь её предоставлять пользователям и другим инструментам.

Первый трюк заключается в дублировании некоторых данных в базе данных пакетов. По сути, в одном файле хранятся две версии базы данных: одна, используемая только ghc-pkg, которая содержит полную информацию (используя сериализованную форму типа InstalledPackageInfo, определённого библиотекой Cabal); и вторая версия, созданная ghc-pkg и используемая GHC, которая содержит только подмножество необходимой GHC информации.

Второй трюк заключается в том, что этот модуль подробно описывает только формат второй версии — часть, используемую GHC — а часть, управляемая ghc-pkg, хранится в файле, но здесь она рассматривается как нечитаемый блок данных. Таким образом, эта библиотека избегает зависимости от Cabal.

тип InstalledPackageInfo instpkgid srcpkgid srcpkgname pkgkey modulename Источник

Это подмножество InstalledPackageInfo Cabal, содержащее только те части, которые интересуют GHC.

Конструкторы

InstalledPackageInfo

Поля

installedPackageId :: instpkgid
sourcePackageId :: srcpkgid
packageName :: srcpkgname
packageVersion :: Version
packageKey :: pkgkey
depends :: [instpkgid]
importDirs :: [FilePath]
hsLibraries :: [Строка]
extraLibraries :: [Строка]
extraGHCiLibraries :: [Строка]
libraryDirs :: [FilePath]
frameworks :: [Строка]
frameworkDirs :: [FilePath]
ldOptions :: [Строка]
ccOptions :: [Строка]
includes :: [Строка]
includeDirs :: [FilePath]
haddockInterfaces :: [FilePath]
haddockHTMLs :: [FilePath]
exposedModules :: [ExposedModule instpkgid modulename]
hiddenModules :: [modulename]
instantiatedWith :: [(modulename, OriginalModule instpkgid modulename)]
exposed :: Булево
trusted :: Булево

Примеры

(Eq instpkgid, Eq srcpkgid, Eq srcpkgname, Eq pkgkey, Eq modulename) => Eq (InstalledPackageInfo instpkgid srcpkgid srcpkgname pkgkey modulename)
(Show instpkgid, Show srcpkgid, Show srcpkgname, Show pkgkey, Show modulename) => Show (InstalledPackageInfo instpkgid srcpkgid srcpkgname pkgkey modulename)
(BinaryStringRep a, BinaryStringRep b, BinaryStringRep c, BinaryStringRep d, BinaryStringRep e) => Binary (InstalledPackageInfo a b c d e)

тип ExposedModule instpkgid modulename Источник

Представляет имя модуля, экспортируемого пакетом, хранящееся в поле exposedModules. Экспорт модуля может быть реэкспортом (в этом случае exposedReexport содержит исходный источник модуля), и может быть сигнатурой (в этом случае 'exposedSignature содержит, с чем была скомпилирована сигнатура). Таким образом:

  • ExposedModule n Nothing Nothing представляет экспортированный модуль n, который был определён в этом пакете.
  • ExposedModule n (Just o) Nothing представляет реэкспортированный модуль n, который был первоначально определён в o.
  • ExposedModule n Nothing (Just s) представляет экспортированную сигнатуру n, которая была скомпилирована с реализацией s.
  • ExposedModule n (Just o) (Just s) представляет реэкспортированную сигнатуру, которая была первоначально определена в o и была скомпилирована с реализацией s.

Мы используем два типа данных Maybe вместо ADT с четырьмя ветвями или четырьмя полями, потому что это представление позволяет нам единообразно обрабатывать реэкспорт/сигнатуры.

Конструкторы

ExposedModule

Поля

exposedName :: modulename
exposedReexport :: Может быть (OriginalModule instpkgid modulename)
exposedSignature :: Может быть (OriginalModule instpkgid modulename)

Примеры

(Eq instpkgid, Eq modulename) => Eq (ExposedModule instpkgid modulename)
(Show instpkgid, Show modulename) => Show (ExposedModule instpkgid modulename)
(BinaryStringRep a, BinaryStringRep b) => Binary (ExposedModule a b)

тип OriginalModule instpkgid modulename Источник

Исходный модуль — это полное имя модуля (идентификатор установленного пакета плюс имя модуля), представляющее, где модуль был *первоначально* определён (т. е., поле exposedReexport записи исходного ExposedModule должно быть Nothing). Инвариант: OriginalModule никогда не указывает на реэкспорт.

Конструкторы

OriginalModule

Поля

originalPackageId :: instpkgid
originalModuleName :: modulename

Экземпляры

(Eq instpkgid, Eq modulename) => Eq (OriginalModule instpkgid modulename)
(Show instpkgid, Show modulename) => Show (OriginalModule instpkgid modulename)
(BinaryStringRep a, BinaryStringRep b) => Binary (OriginalModule a b)

class BinaryStringRep a where Source

Методы

fromStringRep :: ByteString -> a Source

toStringRep :: a -> ByteString Source

emptyInstalledPackageInfo :: (BinaryStringRep a, BinaryStringRep b, BinaryStringRep c, BinaryStringRep d) => InstalledPackageInfo a b c d e Source

readPackageDbForGhc :: (BinaryStringRep a, BinaryStringRep b, BinaryStringRep c, BinaryStringRep d, BinaryStringRep e) => FilePath -> IO [InstalledPackageInfo a b c d e] Source

Чтение части базы данных пакетов, необходимой GHC.

readPackageDbForGhcPkg :: Binary pkgs => FilePath -> IO pkgs Source

Чтение части базы данных пакетов, необходимой ghc-pkg.

Обратите внимание, что экземпляр Binary для представления пакетов ghc-pkg не определён в этом пакете. Это связано с тем, что ghc-pkg использует типы Cabal (и экземпляры Binary для них), от которых этот пакет не зависит.

writePackageDb :: (Binary pkgs, BinaryStringRep a, BinaryStringRep b, BinaryStringRep c, BinaryStringRep d, BinaryStringRep e) => FilePath -> [InstalledPackageInfo a b c d e] -> pkgs -> IO () Source

Запись всей базы данных пакетов, обеих её частей.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/bin-package-db-0.0.0.0/GHC-PackageDb.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API