Cabal-syntax-3.18.1.0: src/Distribution/Types/GenericPackageDescription.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Distribution.Types.GenericPackageDescription
( GenericPackageDescription (..)
, emptyGenericPackageDescription
) where
import Distribution.Compat.Prelude
import Prelude ()
-- lens
import Distribution.Compat.Lens as L
import qualified Distribution.Types.BuildInfo.Lens as L
import Distribution.Types.PackageDescription
import Distribution.Package
import Distribution.Types.Benchmark
import Distribution.Types.CondTree
import Distribution.Types.ConfVar
import Distribution.Types.Executable
import Distribution.Types.Flag
import Distribution.Types.ForeignLib
import Distribution.Types.Library
import Distribution.Types.TestSuite
import Distribution.Types.UnqualComponentName
import Distribution.Version
-- ---------------------------------------------------------------------------
-- The 'GenericPackageDescription' type
data GenericPackageDescription = GenericPackageDescription
{ packageDescription :: PackageDescription
, gpdScannedVersion :: Maybe Version
-- ^ This is a version as specified in source.
-- We populate this field in index reading for dummy GPDs,
-- only when GPD reading failed, but scanning haven't.
--
-- Cabal-the-library never produces GPDs with Just as gpdScannedVersion.
--
-- Perfectly, PackageIndex should have sum type, so we don't need to
-- have dummy GPDs.
, genPackageFlags :: [PackageFlag]
, condLibrary :: Maybe (CondTree ConfVar Library)
, condSubLibraries
:: [ ( UnqualComponentName
, CondTree ConfVar Library
)
]
, condForeignLibs
:: [ ( UnqualComponentName
, CondTree ConfVar ForeignLib
)
]
, condExecutables
:: [ ( UnqualComponentName
, CondTree ConfVar Executable
)
]
, condTestSuites
:: [ ( UnqualComponentName
, CondTree ConfVar TestSuite
)
]
, condBenchmarks
:: [ ( UnqualComponentName
, CondTree ConfVar Benchmark
)
]
}
deriving (Show, Eq, Data, Generic)
instance Package GenericPackageDescription where
packageId = packageId . packageDescription
instance Binary GenericPackageDescription
instance Structured GenericPackageDescription
instance NFData GenericPackageDescription
emptyGenericPackageDescription :: GenericPackageDescription
emptyGenericPackageDescription = GenericPackageDescription emptyPackageDescription Nothing [] Nothing [] [] [] [] []
-- -----------------------------------------------------------------------------
-- Traversal Instances
instance L.HasBuildInfos GenericPackageDescription where
traverseBuildInfos f (GenericPackageDescription p v a1 x1 x2 x3 x4 x5 x6) =
GenericPackageDescription
<$> L.traverseBuildInfos f p
<*> pure v
<*> pure a1
<*> (traverse . traverse . L.buildInfo) f x1
<*> (traverse . L._2 . traverse . L.buildInfo) f x2
<*> (traverse . L._2 . traverse . L.buildInfo) f x3
<*> (traverse . L._2 . traverse . L.buildInfo) f x4
<*> (traverse . L._2 . traverse . L.buildInfo) f x5
<*> (traverse . L._2 . traverse . L.buildInfo) f x6