-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Access cabal-install's Hackage database via Data.Map -- -- This library provides convenient access to the local copy of the -- Hackage database that "cabal update" creates. Check out -- https:/github.competihackage-dbtreemasterexample/ -- for a collection of simple example programs that demonstrate how to -- use this code. @package hackage-db @version 2.1.0 module Distribution.Hackage.DB.Errors data HackageDBTarball a HackageDBTarball :: FilePath -> a -> HackageDBTarball a data HackageDBPackageName a HackageDBPackageName :: PackageName -> a -> HackageDBPackageName a data HackageDBPackageVersion a HackageDBPackageVersion :: Version -> a -> HackageDBPackageVersion a newtype IncorrectTarfile IncorrectTarfile :: FormatError -> IncorrectTarfile newtype UnsupportedTarEntry UnsupportedTarEntry :: Entry -> UnsupportedTarEntry newtype InvalidMetaFile InvalidMetaFile :: String -> InvalidMetaFile newtype InvalidCabalFile InvalidCabalFile :: String -> InvalidCabalFile data InvalidRepresentationOfType InvalidRepresentationOfType :: String -> String -> InvalidRepresentationOfType data NoHackageTarballFound NoHackageTarballFound :: NoHackageTarballFound instance GHC.Show.Show Distribution.Hackage.DB.Errors.NoHackageTarballFound instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidRepresentationOfType instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidCabalFile instance GHC.Show.Show Distribution.Hackage.DB.Errors.InvalidMetaFile instance GHC.Show.Show Distribution.Hackage.DB.Errors.UnsupportedTarEntry instance GHC.Show.Show Distribution.Hackage.DB.Errors.IncorrectTarfile instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBPackageVersion a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBPackageName a) instance GHC.Show.Show a => GHC.Show.Show (Distribution.Hackage.DB.Errors.HackageDBTarball a) instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.NoHackageTarballFound instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.InvalidRepresentationOfType instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.InvalidCabalFile instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.InvalidMetaFile instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.UnsupportedTarEntry instance GHC.Exception.Type.Exception Distribution.Hackage.DB.Errors.IncorrectTarfile instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Type.Exception (Distribution.Hackage.DB.Errors.HackageDBPackageVersion a) instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Type.Exception (Distribution.Hackage.DB.Errors.HackageDBPackageName a) instance (GHC.Show.Show a, Data.Typeable.Internal.Typeable a) => GHC.Exception.Type.Exception (Distribution.Hackage.DB.Errors.HackageDBTarball a) -- | Types and class instances for parsing the package.json files -- found in a 01-index.tar tarball from Hackage with -- Data.Aeson. These parsers mirror the exact structure of those -- files, but only a small part of it is actually of interest to anyone -- other than implementors of cabal-install. Everyone else will -- most likely prefer the functions oferred by -- Distribution.Hackage.DB.Parsed. module Distribution.Hackage.DB.MetaData -- | Parse the package.json file found in a 01-index.tar -- tarball from Hackage with Data.Aeson. This function is a -- convenience wrapper around eitherDecode that throws an -- InvalidMetaFile exception to signal failure. -- --
-- >>> :set -XOverloadedStrings
--
-- >>> parseMetaData "{\"signatures\":[],\"signed\":{\"_type\":\"Targets\",\"expires\":null,\"targets\":{\"<repo>/package/jailbreak-cabal-1.3.2.tar.gz\":{\"hashes\":{\"md5\":\"ba42b3e68323ccbeb3ac900cd68f9e90\",\"sha256\":\"212a8bbc3dfc748c4063282414a2726709d651322f3984c9989179d2352950f4\"},\"length\":2269}},\"version\":0}}"
-- MetaData {signed = SignedMetaData {version = 0, expires = Nothing, _type = "Targets", targets = fromList [("<repo>/package/jailbreak-cabal-1.3.2.tar.gz",TargetData {length = 2269, hashes = fromList [("md5","ba42b3e68323ccbeb3ac900cd68f9e90"),("sha256","212a8bbc3dfc748c4063282414a2726709d651322f3984c9989179d2352950f4")]})]}, signatures = []}
--
parseMetaData :: ByteString -> MetaData
data MetaData
MetaData :: SignedMetaData -> [String] -> MetaData
[signed] :: MetaData -> SignedMetaData
[signatures] :: MetaData -> [String]
data SignedMetaData
SignedMetaData :: Int -> Maybe String -> String -> Map String TargetData -> SignedMetaData
[version] :: SignedMetaData -> Int
[expires] :: SignedMetaData -> Maybe String
[_type] :: SignedMetaData -> String
[targets] :: SignedMetaData -> Map String TargetData
data TargetData
TargetData :: Int -> Map String String -> TargetData
[length] :: TargetData -> Int
[hashes] :: TargetData -> Map String String
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.MetaData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.MetaData
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.SignedMetaData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.SignedMetaData
instance GHC.Generics.Generic Distribution.Hackage.DB.MetaData.TargetData
instance GHC.Show.Show Distribution.Hackage.DB.MetaData.TargetData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.MetaData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.SignedMetaData
instance Data.Aeson.Types.FromJSON.FromJSON Distribution.Hackage.DB.MetaData.TargetData
-- | Find the location of the local Hackage database that is maintained by
-- running cabal update.
module Distribution.Hackage.DB.Path
cabalStateDir :: IO FilePath
cabalTarballDir :: String -> IO FilePath
hackageTarballDir :: IO FilePath
-- | Determine the default path of the Hackage database, which typically
-- resides at
-- "$HOME/.cabal/packages/hackage.haskell.org/00-index.tar".
-- Running the command "cabal update" will keep that file
-- up-to-date.
hackageTarball :: IO FilePath
module Distribution.Hackage.DB.Utility
parseText :: Parsec a => String -> String -> a
-- | Convert the the EpochTime used by the tar library into
-- a standard UTCTime type.
fromEpochTime :: EpochTime -> UTCTime
-- | Convert the standard UTCTime type into the EpochTime
-- used by the tar library.
toEpochTime :: UTCTime -> EpochTime
-- | Parse an UTC timestamp in extended ISO8601 format a standard
-- UTCTime type. This function is useful to parse the "snapshot"
-- identifier printed by cabal-install after a database update
-- into a useable type. Combine with toEpochTime to obtain an
-- EpochTime that can be passed to the Hackage DB reading code
-- from this library.
--
-- -- >>> parseIso8601 "2018-12-21T13:17:40Z" -- 2018-12-21 13:17:40 UTC --parseIso8601 :: MonadFail m => String -> m UTCTime module Distribution.Hackage.DB.Builder readTarball :: FilePath -> IO (Entries FormatError) parseTarball :: MonadThrow m => Builder m a -> Maybe EpochTime -> Entries FormatError -> a -> m a data Builder m a Builder :: (PackageName -> EpochTime -> ByteString -> a -> m a) -> (PackageName -> Version -> EpochTime -> ByteString -> a -> m a) -> (PackageName -> Version -> EpochTime -> ByteString -> a -> m a) -> Builder m a [insertPreferredVersions] :: Builder m a -> PackageName -> EpochTime -> ByteString -> a -> m a [insertCabalFile] :: Builder m a -> PackageName -> Version -> EpochTime -> ByteString -> a -> m a [insertMetaFile] :: Builder m a -> PackageName -> Version -> EpochTime -> ByteString -> a -> m a module Distribution.Hackage.DB.Unparsed type HackageDB = Map PackageName PackageData data PackageData PackageData :: !ByteString -> !Map Version VersionData -> PackageData [preferredVersions] :: PackageData -> !ByteString [versions] :: PackageData -> !Map Version VersionData data VersionData VersionData :: !ByteString -> !ByteString -> VersionData [cabalFile] :: VersionData -> !ByteString [metaFile] :: VersionData -> !ByteString readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: MonadThrow m => Maybe UTCTime -> Entries FormatError -> HackageDB -> m HackageDB builder :: Applicative m => Builder m HackageDB instance GHC.Generics.Generic Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Classes.Eq Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Show.Show Distribution.Hackage.DB.Unparsed.PackageData instance GHC.Generics.Generic Distribution.Hackage.DB.Unparsed.VersionData instance GHC.Classes.Eq Distribution.Hackage.DB.Unparsed.VersionData instance GHC.Show.Show Distribution.Hackage.DB.Unparsed.VersionData module Distribution.Hackage.DB.Parsed type HackageDB = Map PackageName PackageData type PackageData = Map Version VersionData data VersionData VersionData :: !GenericPackageDescription -> !Map String String -> VersionData [cabalFile] :: VersionData -> !GenericPackageDescription [tarballHashes] :: VersionData -> !Map String String readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: MonadThrow m => Maybe UTCTime -> Entries FormatError -> m HackageDB parseDB :: HackageDB -> HackageDB parsePackageData :: PackageName -> PackageData -> PackageData parseVersionData :: PackageName -> Version -> VersionData -> VersionData parseMetaData :: PackageName -> Version -> ByteString -> Map String String instance GHC.Generics.Generic Distribution.Hackage.DB.Parsed.VersionData instance GHC.Classes.Eq Distribution.Hackage.DB.Parsed.VersionData instance GHC.Show.Show Distribution.Hackage.DB.Parsed.VersionData module Distribution.Hackage.DB type HackageDB = Map PackageName PackageData type PackageData = Map Version VersionData data VersionData VersionData :: !GenericPackageDescription -> !Map String String -> VersionData [cabalFile] :: VersionData -> !GenericPackageDescription [tarballHashes] :: VersionData -> !Map String String readTarball :: Maybe UTCTime -> FilePath -> IO HackageDB parseTarball :: MonadThrow m => Maybe UTCTime -> Entries FormatError -> m HackageDB -- | Determine the default path of the Hackage database, which typically -- resides at -- "$HOME/.cabal/packages/hackage.haskell.org/00-index.tar". -- Running the command "cabal update" will keep that file -- up-to-date. hackageTarball :: IO FilePath