Distribution/Types/GenericPackageDescription/Lens.hs

    module Distribution.Types.GenericPackageDescription.Lens (
        GenericPackageDescription,
        Flag,
        FlagName,
        ConfVar (..),
        module Distribution.Types.GenericPackageDescription.Lens,
        ) where

    import Prelude()
    import Distribution.Compat.Prelude
    import Distribution.Compat.Lens

    import Distribution.Types.GenericPackageDescription (GenericPackageDescription(GenericPackageDescription), Flag(MkFlag), FlagName, ConfVar (..))

    -- lens
    import Distribution.Types.BuildInfo.Lens

    -- We import types from their packages, so we can remove unused imports
    -- and have wider inter-module dependency graph
    import Distribution.Types.CondTree (CondTree)
    import Distribution.Types.Dependency (Dependency)
    import Distribution.Types.Executable (Executable)
    import Distribution.Types.PackageDescription (PackageDescription)
    import Distribution.Types.Benchmark (Benchmark)
    import Distribution.Types.ForeignLib (ForeignLib)
    import Distribution.Types.Library (Library)
    import Distribution.Types.TestSuite (TestSuite)
    import Distribution.Types.UnqualComponentName (UnqualComponentName)
    import Distribution.System (Arch, OS)
    import Distribution.Compiler (CompilerFlavor)
    import Distribution.Version (VersionRange)

    -------------------------------------------------------------------------------
    -- GenericPackageDescription
    -------------------------------------------------------------------------------

    condBenchmarks :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Benchmark)]
    condBenchmarks f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 y1) (f x8)
    {-# INLINE condBenchmarks #-}

    condExecutables :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Executable)]
    condExecutables f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 x3 x4 x5 y1 x7 x8) (f x6)
    {-# INLINE condExecutables #-}

    condForeignLibs :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Distribution.Types.ForeignLib.ForeignLib)]
    condForeignLibs f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 x3 x4 y1 x6 x7 x8) (f x5)
    {-# INLINE condForeignLibs #-}

    condLibrary :: Lens' GenericPackageDescription (Maybe (CondTree ConfVar [Dependency] Library))
    condLibrary f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 y1 x4 x5 x6 x7 x8) (f x3)
    {-# INLINE condLibrary #-}

    condSubLibraries :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] Library)]
    condSubLibraries f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 x3 y1 x5 x6 x7 x8) (f x4)
    {-# INLINE condSubLibraries #-}

    condTestSuites :: Lens' GenericPackageDescription [(UnqualComponentName, CondTree ConfVar [Dependency] TestSuite)]
    condTestSuites f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 x2 x3 x4 x5 x6 y1 x8) (f x7)
    {-# INLINE condTestSuites #-}

    genPackageFlags :: Lens' GenericPackageDescription [Flag]
    genPackageFlags f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription x1 y1 x3 x4 x5 x6 x7 x8) (f x2)
    {-# INLINE genPackageFlags #-}

    packageDescription :: Lens' GenericPackageDescription PackageDescription
    packageDescription f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) = fmap (\y1 -> GenericPackageDescription y1 x2 x3 x4 x5 x6 x7 x8) (f x1)
    {-# INLINE packageDescription #-}

    -------------------------------------------------------------------------------
    -- BuildInfos
    -------------------------------------------------------------------------------

    buildInfos :: Traversal' GenericPackageDescription BuildInfo
    buildInfos f (GenericPackageDescription x1 x2 x3 x4 x5 x6 x7 x8) =
        GenericPackageDescription x1 x2
            <$> (traverse . traverse . buildInfo) f x3
            <*> (traverse . _2 . traverse . buildInfo) f x4
            <*> (traverse . _2 . traverse . buildInfo) f x5
            <*> (traverse . _2 . traverse . buildInfo) f x6
            <*> (traverse . _2 . traverse . buildInfo) f x7
            <*> (traverse . _2 . traverse . buildInfo) f x8

    -------------------------------------------------------------------------------
    -- Flag
    -------------------------------------------------------------------------------

    flagName :: Lens' Flag FlagName
    flagName f (MkFlag x1 x2 x3 x4) = fmap (\y1 -> MkFlag y1 x2 x3 x4) (f x1)
    {-# INLINE flagName #-}

    flagDescription :: Lens' Flag String
    flagDescription f (MkFlag x1 x2 x3 x4) = fmap (\y1 -> MkFlag x1 y1 x3 x4) (f x2)
    {-# INLINE flagDescription #-}

    flagDefault :: Lens' Flag Bool
    flagDefault f (MkFlag x1 x2 x3 x4) = fmap (\y1 -> MkFlag x1 x2 y1 x4) (f x3)
    {-# INLINE flagDefault #-}

    flagManual :: Lens' Flag Bool
    flagManual f (MkFlag x1 x2 x3 x4) = fmap (\y1 -> MkFlag x1 x2 x3 y1) (f x4)
    {-# INLINE flagManual #-}

    -------------------------------------------------------------------------------
    -- ConfVar
    -------------------------------------------------------------------------------

    _OS :: Traversal' ConfVar OS
    _OS f (OS os) = OS <$> f os
    _OS _ x       = pure x

    _Arch :: Traversal' ConfVar Arch
    _Arch f (Arch arch) = Arch <$> f arch
    _Arch _ x           = pure x

    _Flag :: Traversal' ConfVar FlagName
    _Flag f (Flag flag) = Flag <$> f flag
    _Flag _ x           = pure x

    _Impl :: Traversal' ConfVar (CompilerFlavor, VersionRange)
    _Impl f (Impl cf vr) = uncurry Impl <$> f (cf, vr)
    _Impl _ x            = pure x