Cabal-syntax-3.14.2.0: src/Distribution/Types/AbiDependency.hs
{-# LANGUAGE DeriveGeneric #-}
module Distribution.Types.AbiDependency where
import Distribution.Compat.Prelude
import Prelude ()
import Distribution.Parsec
import Distribution.Pretty
import qualified Distribution.Compat.CharParsing as P
import qualified Distribution.Package as Package
import qualified Text.PrettyPrint as Disp
-- | 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.
data AbiDependency = AbiDependency
{ depUnitId :: Package.UnitId
, depAbiHash :: Package.AbiHash
}
deriving (Eq, Generic, Read, Show)
instance Pretty AbiDependency where
pretty (AbiDependency uid abi) =
pretty uid <<>> Disp.char '=' <<>> pretty abi
instance Parsec AbiDependency where
parsec = do
uid <- parsec
_ <- P.char '='
abi <- parsec
return (AbiDependency uid abi)
instance Binary AbiDependency
instance Structured AbiDependency
instance NFData AbiDependency where rnf = genericRnf