{-# LANGUAGE ConstraintKinds       #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}
-- | 'GenericPackageDescription' Field descriptions
module Distribution.PackageDescription.FieldGrammar (
    -- * Package description
    packageDescriptionFieldGrammar,
    -- * Library
    libraryFieldGrammar,
    -- * Foreign library
    foreignLibFieldGrammar,
    -- * Executable
    executableFieldGrammar,
    -- * Test suite
    TestSuiteStanza (..),
    testSuiteFieldGrammar,
    validateTestSuite,
    unvalidateTestSuite,
    -- ** Lenses
    testStanzaTestType,
    testStanzaMainIs,
    testStanzaTestModule,
    testStanzaBuildInfo,
    -- * Benchmark
    BenchmarkStanza (..),
    benchmarkFieldGrammar,
    validateBenchmark,
    unvalidateBenchmark,
    -- * Field grammars
    formatDependencyList,
    formatExposedModules,
    formatExtraSourceFiles,
    formatHsSourceDirs,
    formatMixinList,
    formatOtherExtensions,
    formatOtherModules,
    -- ** Lenses
    benchmarkStanzaBenchmarkType,
    benchmarkStanzaMainIs,
    benchmarkStanzaBenchmarkModule,
    benchmarkStanzaBuildInfo,
    -- * Flag
    flagFieldGrammar,
    -- * Source repository
    sourceRepoFieldGrammar,
    -- * Setup build info
    setupBInfoFieldGrammar,
    -- * Component build info
    buildInfoFieldGrammar,
    ) where


import Distribution.Compat.Lens
import Distribution.Compat.Prelude
import Language.Haskell.Extension
import Prelude ()

import Distribution.CabalSpecVersion
import Distribution.Compat.Newtype     (Newtype, pack', unpack')
import Distribution.Compiler           (CompilerFlavor (..), PerCompilerFlavor (..))
import Distribution.FieldGrammar
import Distribution.Fields
import Distribution.ModuleName         (ModuleName)
import Distribution.Package
import Distribution.PackageDescription
import Distribution.Parsec
import Distribution.Pretty             (Pretty (..), prettyShow, showToken)
import Distribution.Utils.Path
import Distribution.Version            (Version, VersionRange)

import qualified Data.ByteString.Char8           as BS8
import qualified Distribution.Compat.CharParsing as P
import qualified Distribution.SPDX               as SPDX
import qualified Distribution.Types.Lens         as L

-------------------------------------------------------------------------------
-- PackageDescription
-------------------------------------------------------------------------------

packageDescriptionFieldGrammar
    :: ( FieldGrammar c g, Applicative (g PackageDescription), Applicative (g PackageIdentifier)
       , c (Identity BuildType)
       , c (Identity PackageName)
       , c (Identity Version)
       , c (List FSep FilePathNT String)
       , c (List FSep CompatFilePath String)
       , c (List FSep (Identity (SymbolicPath PackageDir LicenseFile)) (SymbolicPath PackageDir LicenseFile))
       , c (List FSep TestedWith (CompilerFlavor, VersionRange))
       , c (List VCat FilePathNT String)
       , c FilePathNT
       , c CompatLicenseFile
       , c CompatFilePath
       , c SpecLicense
       , c SpecVersion
       )
    => g PackageDescription PackageDescription
packageDescriptionFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g PackageDescription),
 Applicative (g PackageIdentifier), c (Identity BuildType),
 c (Identity PackageName), c (Identity Version),
 c (List FSep FilePathNT String),
 c (List FSep CompatFilePath String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile)),
 c (List FSep TestedWith (CompilerFlavor, VersionRange)),
 c (List VCat FilePathNT String), c FilePathNT, c CompatLicenseFile,
 c CompatFilePath, c SpecLicense, c SpecVersion) =>
g PackageDescription PackageDescription
packageDescriptionFieldGrammar = CabalSpecVersion
-> PackageIdentifier
-> Either License License
-> [SymbolicPath PackageDir LicenseFile]
-> ShortText
-> ShortText
-> ShortText
-> ShortText
-> [(CompilerFlavor, VersionRange)]
-> ShortText
-> ShortText
-> ShortText
-> [SourceRepo]
-> ShortText
-> ShortText
-> ShortText
-> [(String, String)]
-> Maybe BuildType
-> Maybe SetupBuildInfo
-> Maybe Library
-> [Library]
-> [Executable]
-> [ForeignLib]
-> [TestSuite]
-> [Benchmark]
-> [String]
-> String
-> [String]
-> [String]
-> [String]
-> PackageDescription
PackageDescription
    (CabalSpecVersion
 -> PackageIdentifier
 -> Either License License
 -> [SymbolicPath PackageDir LicenseFile]
 -> ShortText
 -> ShortText
 -> ShortText
 -> ShortText
 -> [(CompilerFlavor, VersionRange)]
 -> ShortText
 -> ShortText
 -> ShortText
 -> [SourceRepo]
 -> ShortText
 -> ShortText
 -> ShortText
 -> [(String, String)]
 -> Maybe BuildType
 -> Maybe SetupBuildInfo
 -> Maybe Library
 -> [Library]
 -> [Executable]
 -> [ForeignLib]
 -> [TestSuite]
 -> [Benchmark]
 -> [String]
 -> String
 -> [String]
 -> [String]
 -> [String]
 -> PackageDescription)
-> g PackageDescription CabalSpecVersion
-> g PackageDescription
     (PackageIdentifier
      -> Either License License
      -> [SymbolicPath PackageDir LicenseFile]
      -> ShortText
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> (CabalSpecVersion -> SpecVersion)
-> ALens' PackageDescription CabalSpecVersion
-> CabalSpecVersion
-> g PackageDescription CabalSpecVersion
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"cabal-version" CabalSpecVersion -> SpecVersion
SpecVersion                ALens' PackageDescription CabalSpecVersion
Lens' PackageDescription CabalSpecVersion
L.specVersion CabalSpecVersion
CabalSpecV1_0
    g PackageDescription
  (PackageIdentifier
   -> Either License License
   -> [SymbolicPath PackageDir LicenseFile]
   -> ShortText
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription PackageIdentifier
-> g PackageDescription
     (Either License License
      -> [SymbolicPath PackageDir LicenseFile]
      -> ShortText
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' PackageDescription PackageIdentifier
-> g PackageIdentifier PackageIdentifier
-> g PackageDescription PackageIdentifier
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' PackageDescription PackageIdentifier
Lens' PackageDescription PackageIdentifier
L.package g PackageIdentifier PackageIdentifier
packageIdentifierGrammar
    g PackageDescription
  (Either License License
   -> [SymbolicPath PackageDir LicenseFile]
   -> ShortText
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription (Either License License)
-> g PackageDescription
     ([SymbolicPath PackageDir LicenseFile]
      -> ShortText
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Either License License -> SpecLicense)
-> ALens' PackageDescription (Either License License)
-> Either License License
-> g PackageDescription (Either License License)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"license"       Either License License -> SpecLicense
SpecLicense                ALens' PackageDescription (Either License License)
Lens' PackageDescription (Either License License)
L.licenseRaw (License -> Either License License
forall a b. a -> Either a b
Left License
SPDX.NONE)
    g PackageDescription
  ([SymbolicPath PackageDir LicenseFile]
   -> ShortText
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription
     (ShortText
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g PackageDescription [SymbolicPath PackageDir LicenseFile]
licenseFilesGrammar
    g PackageDescription
  (ShortText
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"copyright"                                ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.copyright
    g PackageDescription
  (ShortText
   -> ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"maintainer"                               ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.maintainer
    g PackageDescription
  (ShortText
   -> ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> [(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"author"                                   ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.author
    g PackageDescription
  (ShortText
   -> [(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     ([(CompilerFlavor, VersionRange)]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"stability"                                ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.stability
    g PackageDescription
  ([(CompilerFlavor, VersionRange)]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [(CompilerFlavor, VersionRange)]
-> g PackageDescription
     (ShortText
      -> ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([(CompilerFlavor, VersionRange)]
    -> List FSep TestedWith (CompilerFlavor, VersionRange))
-> ALens' PackageDescription [(CompilerFlavor, VersionRange)]
-> g PackageDescription [(CompilerFlavor, VersionRange)]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"tested-with"   (FSep
-> ((CompilerFlavor, VersionRange) -> TestedWith)
-> [(CompilerFlavor, VersionRange)]
-> List FSep TestedWith (CompilerFlavor, VersionRange)
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep (CompilerFlavor, VersionRange) -> TestedWith
TestedWith) ALens' PackageDescription [(CompilerFlavor, VersionRange)]
Lens' PackageDescription [(CompilerFlavor, VersionRange)]
L.testedWith
    g PackageDescription
  (ShortText
   -> ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"homepage"                                 ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.homepage
    g PackageDescription
  (ShortText
   -> ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> [SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"package-url"                              ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.pkgUrl
    g PackageDescription
  (ShortText
   -> [SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     ([SourceRepo]
      -> ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST   FieldName
"bug-reports"                              ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.bugReports
    g PackageDescription
  ([SourceRepo]
   -> ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [SourceRepo]
-> g PackageDescription
     (ShortText
      -> ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [SourceRepo] -> g PackageDescription [SourceRepo]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [] -- source-repos are stanza
    g PackageDescription
  (ShortText
   -> ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"synopsis"                                 ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.synopsis
    g PackageDescription
  (ShortText
   -> ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     (ShortText
      -> [(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"description"                              ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.description
    g PackageDescription
  (ShortText
   -> [(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription ShortText
-> g PackageDescription
     ([(String, String)]
      -> Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription ShortText
-> g PackageDescription ShortText
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s ShortText -> g s ShortText
freeTextFieldDefST  FieldName
"category"                                 ALens' PackageDescription ShortText
Lens' PackageDescription ShortText
L.category
    g PackageDescription
  ([(String, String)]
   -> Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [(String, String)]
-> g PackageDescription
     (Maybe BuildType
      -> Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription [(String, String)]
-> g PackageDescription [(String, String)]
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s [(String, String)] -> g s [(String, String)]
prefixedFields      FieldName
"x-"                                       ALens' PackageDescription [(String, String)]
Lens' PackageDescription [(String, String)]
L.customFieldsPD
    g PackageDescription
  (Maybe BuildType
   -> Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription (Maybe BuildType)
-> g PackageDescription
     (Maybe SetupBuildInfo
      -> Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageDescription (Maybe BuildType)
-> g PackageDescription (Maybe BuildType)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField       FieldName
"build-type"                               ALens' PackageDescription (Maybe BuildType)
Lens' PackageDescription (Maybe BuildType)
L.buildTypeRaw
    g PackageDescription
  (Maybe SetupBuildInfo
   -> Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription (Maybe SetupBuildInfo)
-> g PackageDescription
     (Maybe Library
      -> [Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe SetupBuildInfo -> g PackageDescription (Maybe SetupBuildInfo)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe SetupBuildInfo
forall a. Maybe a
Nothing -- custom-setup
    -- components
    g PackageDescription
  (Maybe Library
   -> [Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription (Maybe Library)
-> g PackageDescription
     ([Library]
      -> [Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Maybe Library -> g PackageDescription (Maybe Library)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Library
forall a. Maybe a
Nothing  -- lib
    g PackageDescription
  ([Library]
   -> [Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [Library]
-> g PackageDescription
     ([Executable]
      -> [ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Library] -> g PackageDescription [Library]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []       -- sub libs
    g PackageDescription
  ([Executable]
   -> [ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [Executable]
-> g PackageDescription
     ([ForeignLib]
      -> [TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Executable] -> g PackageDescription [Executable]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []       -- executables
    g PackageDescription
  ([ForeignLib]
   -> [TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [ForeignLib]
-> g PackageDescription
     ([TestSuite]
      -> [Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [ForeignLib] -> g PackageDescription [ForeignLib]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []       -- foreign libs
    g PackageDescription
  ([TestSuite]
   -> [Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [TestSuite]
-> g PackageDescription
     ([Benchmark]
      -> [String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [TestSuite] -> g PackageDescription [TestSuite]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []       -- test suites
    g PackageDescription
  ([Benchmark]
   -> [String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [Benchmark]
-> g PackageDescription
     ([String]
      -> String
      -> [String]
      -> [String]
      -> [String]
      -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Benchmark] -> g PackageDescription [Benchmark]
forall (f :: * -> *) a. Applicative f => a -> f a
pure []       -- benchmarks
    --  * Files
    g PackageDescription
  ([String]
   -> String
   -> [String]
   -> [String]
   -> [String]
   -> PackageDescription)
-> g PackageDescription [String]
-> g PackageDescription
     (String -> [String] -> [String] -> [String] -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' PackageDescription [String]
-> g PackageDescription [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"data-files"         (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT) ALens' PackageDescription [String]
Lens' PackageDescription [String]
L.dataFiles
    g PackageDescription
  (String -> [String] -> [String] -> [String] -> PackageDescription)
-> g PackageDescription String
-> g PackageDescription
     ([String] -> [String] -> [String] -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> CompatFilePath)
-> ALens' PackageDescription String
-> String
-> g PackageDescription String
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"data-dir"           String -> CompatFilePath
CompatFilePath             ALens' PackageDescription String
Lens' PackageDescription String
L.dataDir String
"."
        g PackageDescription String
-> (g PackageDescription String -> g PackageDescription String)
-> g PackageDescription String
forall a b. a -> (a -> b) -> b
^^^ (String -> String)
-> g PackageDescription String -> g PackageDescription String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\String
x -> if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
x then String
"." else String
x) -- map empty directories to "."
    g PackageDescription
  ([String] -> [String] -> [String] -> PackageDescription)
-> g PackageDescription [String]
-> g PackageDescription
     ([String] -> [String] -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' PackageDescription [String]
-> g PackageDescription [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"extra-source-files" [String] -> List VCat FilePathNT String
formatExtraSourceFiles     ALens' PackageDescription [String]
Lens' PackageDescription [String]
L.extraSrcFiles
    g PackageDescription ([String] -> [String] -> PackageDescription)
-> g PackageDescription [String]
-> g PackageDescription ([String] -> PackageDescription)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' PackageDescription [String]
-> g PackageDescription [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"extra-tmp-files"    (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT) ALens' PackageDescription [String]
Lens' PackageDescription [String]
L.extraTmpFiles
    g PackageDescription ([String] -> PackageDescription)
-> g PackageDescription [String]
-> g PackageDescription PackageDescription
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' PackageDescription [String]
-> g PackageDescription [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"extra-doc-files"    (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT) ALens' PackageDescription [String]
Lens' PackageDescription [String]
L.extraDocFiles
  where
    packageIdentifierGrammar :: g PackageIdentifier PackageIdentifier
packageIdentifierGrammar = PackageName -> Version -> PackageIdentifier
PackageIdentifier
        (PackageName -> Version -> PackageIdentifier)
-> g PackageIdentifier PackageName
-> g PackageIdentifier (Version -> PackageIdentifier)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' PackageIdentifier PackageName
-> g PackageIdentifier PackageName
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s a -> g s a
uniqueField FieldName
"name"    ALens' PackageIdentifier PackageName
Lens' PackageIdentifier PackageName
L.pkgName
        g PackageIdentifier (Version -> PackageIdentifier)
-> g PackageIdentifier Version
-> g PackageIdentifier PackageIdentifier
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' PackageIdentifier Version -> g PackageIdentifier Version
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s a -> g s a
uniqueField FieldName
"version" ALens' PackageIdentifier Version
Lens' PackageIdentifier Version
L.pkgVersion

    licenseFilesGrammar :: g PackageDescription [SymbolicPath PackageDir LicenseFile]
licenseFilesGrammar = [SymbolicPath PackageDir LicenseFile]
-> [SymbolicPath PackageDir LicenseFile]
-> [SymbolicPath PackageDir LicenseFile]
forall a. [a] -> [a] -> [a]
(++)
        -- TODO: neither field is deprecated
        -- should we pretty print license-file if there's single license file
        -- and license-files when more
        ([SymbolicPath PackageDir LicenseFile]
 -> [SymbolicPath PackageDir LicenseFile]
 -> [SymbolicPath PackageDir LicenseFile])
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription
     ([SymbolicPath PackageDir LicenseFile]
      -> [SymbolicPath PackageDir LicenseFile])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile)
-> ALens' PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"license-file"   [SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile
CompatLicenseFile ALens' PackageDescription [SymbolicPath PackageDir LicenseFile]
Lens' PackageDescription [SymbolicPath PackageDir LicenseFile]
L.licenseFiles
        g PackageDescription
  ([SymbolicPath PackageDir LicenseFile]
   -> [SymbolicPath PackageDir LicenseFile])
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([SymbolicPath PackageDir LicenseFile]
    -> List
         FSep
         (Identity (SymbolicPath PackageDir LicenseFile))
         (SymbolicPath PackageDir LicenseFile))
-> ALens' PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla    FieldName
"license-files"  (FSep
-> [SymbolicPath PackageDir LicenseFile]
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep)    ALens' PackageDescription [SymbolicPath PackageDir LicenseFile]
Lens' PackageDescription [SymbolicPath PackageDir LicenseFile]
L.licenseFiles
            g PackageDescription [SymbolicPath PackageDir LicenseFile]
-> (g PackageDescription [SymbolicPath PackageDir LicenseFile]
    -> g PackageDescription [SymbolicPath PackageDir LicenseFile])
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
forall a b. a -> (a -> b) -> b
^^^ g PackageDescription [SymbolicPath PackageDir LicenseFile]
-> g PackageDescription [SymbolicPath PackageDir LicenseFile]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
g s a -> g s a
hiddenField

-------------------------------------------------------------------------------
-- Library
-------------------------------------------------------------------------------

libraryFieldGrammar
    :: ( FieldGrammar c g, Applicative (g Library), Applicative (g BuildInfo)
       , c (Identity LibraryVisibility)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List CommaVCat (Identity ModuleReexport) ModuleReexport)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List VCat Token String)
       , c (MQuoted Language)
       )
    => LibraryName
    -> g Library Library
libraryFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g Library),
 Applicative (g BuildInfo), c (Identity LibraryVisibility),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List CommaVCat (Identity ModuleReexport) ModuleReexport),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
LibraryName -> g Library Library
libraryFieldGrammar LibraryName
n = LibraryName
-> [ModuleName]
-> [ModuleReexport]
-> [ModuleName]
-> Bool
-> LibraryVisibility
-> BuildInfo
-> Library
Library LibraryName
n
    ([ModuleName]
 -> [ModuleReexport]
 -> [ModuleName]
 -> Bool
 -> LibraryVisibility
 -> BuildInfo
 -> Library)
-> g Library [ModuleName]
-> g Library
     ([ModuleReexport]
      -> [ModuleName]
      -> Bool
      -> LibraryVisibility
      -> BuildInfo
      -> Library)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([ModuleName] -> List VCat (MQuoted ModuleName) ModuleName)
-> ALens' Library [ModuleName]
-> g Library [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla  FieldName
"exposed-modules"    [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatExposedModules    ALens' Library [ModuleName]
Lens' Library [ModuleName]
L.exposedModules
    g Library
  ([ModuleReexport]
   -> [ModuleName]
   -> Bool
   -> LibraryVisibility
   -> BuildInfo
   -> Library)
-> g Library [ModuleReexport]
-> g Library
     ([ModuleName] -> Bool -> LibraryVisibility -> BuildInfo -> Library)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ModuleReexport]
    -> List CommaVCat (Identity ModuleReexport) ModuleReexport)
-> ALens' Library [ModuleReexport]
-> g Library [ModuleReexport]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla  FieldName
"reexported-modules" (CommaVCat
-> [ModuleReexport]
-> List CommaVCat (Identity ModuleReexport) ModuleReexport
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList  CommaVCat
CommaVCat)    ALens' Library [ModuleReexport]
Lens' Library [ModuleReexport]
L.reexportedModules
    g Library
  ([ModuleName] -> Bool -> LibraryVisibility -> BuildInfo -> Library)
-> g Library [ModuleName]
-> g Library (Bool -> LibraryVisibility -> BuildInfo -> Library)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ModuleName] -> List VCat (MQuoted ModuleName) ModuleName)
-> ALens' Library [ModuleName]
-> g Library [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla  FieldName
"signatures"         (VCat
-> (ModuleName -> MQuoted ModuleName)
-> [ModuleName]
-> List VCat (MQuoted ModuleName) ModuleName
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat ModuleName -> MQuoted ModuleName
forall a. a -> MQuoted a
MQuoted) ALens' Library [ModuleName]
Lens' Library [ModuleName]
L.signatures
        g Library [ModuleName]
-> (g Library [ModuleName] -> g Library [ModuleName])
-> g Library [ModuleName]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [ModuleName] -> g Library [ModuleName] -> g Library [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_0 []
    g Library (Bool -> LibraryVisibility -> BuildInfo -> Library)
-> g Library Bool
-> g Library (LibraryVisibility -> BuildInfo -> Library)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Library Bool -> Bool -> g Library Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
booleanFieldDef   FieldName
"exposed"                                    ALens' Library Bool
Lens' Library Bool
L.libExposed Bool
True
    g Library (LibraryVisibility -> BuildInfo -> Library)
-> g Library LibraryVisibility -> g Library (BuildInfo -> Library)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g Library LibraryVisibility
visibilityField
    g Library (BuildInfo -> Library)
-> g Library BuildInfo -> g Library Library
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' Library BuildInfo
-> g BuildInfo BuildInfo -> g Library BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' Library BuildInfo
Lens' Library BuildInfo
L.libBuildInfo g BuildInfo BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar
  where
    visibilityField :: g Library LibraryVisibility
visibilityField = case LibraryName
n of
        -- nameless/"main" libraries are public
        LibraryName
LMainLibName -> LibraryVisibility -> g Library LibraryVisibility
forall (f :: * -> *) a. Applicative f => a -> f a
pure LibraryVisibility
LibraryVisibilityPublic
        -- named libraries have the field
        LSubLibName UnqualComponentName
_ ->
            FieldName
-> ALens' Library LibraryVisibility
-> LibraryVisibility
-> g Library LibraryVisibility
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
(FieldGrammar c g, Functor (g s), c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef FieldName
"visibility" ALens' Library LibraryVisibility
Lens' Library LibraryVisibility
L.libVisibility LibraryVisibility
LibraryVisibilityPrivate
            g Library LibraryVisibility
-> (g Library LibraryVisibility -> g Library LibraryVisibility)
-> g Library LibraryVisibility
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> LibraryVisibility
-> g Library LibraryVisibility
-> g Library LibraryVisibility
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 LibraryVisibility
LibraryVisibilityPrivate

{-# SPECIALIZE libraryFieldGrammar :: LibraryName -> ParsecFieldGrammar' Library #-}
{-# SPECIALIZE libraryFieldGrammar :: LibraryName -> PrettyFieldGrammar' Library #-}

-------------------------------------------------------------------------------
-- Foreign library
-------------------------------------------------------------------------------

foreignLibFieldGrammar
    :: ( FieldGrammar c g, Applicative (g ForeignLib), Applicative (g BuildInfo)
       , c (Identity ForeignLibType)
       , c (Identity LibVersionInfo)
       , c (Identity Version)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List FSep (Identity ForeignLibOption) ForeignLibOption)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String), c (List VCat Token String)
       , c (MQuoted Language)
       )
    => UnqualComponentName -> g ForeignLib ForeignLib
foreignLibFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g ForeignLib),
 Applicative (g BuildInfo), c (Identity ForeignLibType),
 c (Identity LibVersionInfo), c (Identity Version),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (Identity ForeignLibOption) ForeignLibOption),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String), c (List VCat Token String),
 c (MQuoted Language)) =>
UnqualComponentName -> g ForeignLib ForeignLib
foreignLibFieldGrammar UnqualComponentName
n = UnqualComponentName
-> ForeignLibType
-> [ForeignLibOption]
-> BuildInfo
-> Maybe LibVersionInfo
-> Maybe Version
-> [String]
-> ForeignLib
ForeignLib UnqualComponentName
n
    (ForeignLibType
 -> [ForeignLibOption]
 -> BuildInfo
 -> Maybe LibVersionInfo
 -> Maybe Version
 -> [String]
 -> ForeignLib)
-> g ForeignLib ForeignLibType
-> g ForeignLib
     ([ForeignLibOption]
      -> BuildInfo
      -> Maybe LibVersionInfo
      -> Maybe Version
      -> [String]
      -> ForeignLib)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' ForeignLib ForeignLibType
-> ForeignLibType
-> g ForeignLib ForeignLibType
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
(FieldGrammar c g, Functor (g s), c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef FieldName
"type"                                         ALens' ForeignLib ForeignLibType
Lens' ForeignLib ForeignLibType
L.foreignLibType ForeignLibType
ForeignLibTypeUnknown
    g ForeignLib
  ([ForeignLibOption]
   -> BuildInfo
   -> Maybe LibVersionInfo
   -> Maybe Version
   -> [String]
   -> ForeignLib)
-> g ForeignLib [ForeignLibOption]
-> g ForeignLib
     (BuildInfo
      -> Maybe LibVersionInfo -> Maybe Version -> [String] -> ForeignLib)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ForeignLibOption]
    -> List FSep (Identity ForeignLibOption) ForeignLibOption)
-> ALens' ForeignLib [ForeignLibOption]
-> g ForeignLib [ForeignLibOption]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"options"           (FSep
-> [ForeignLibOption]
-> List FSep (Identity ForeignLibOption) ForeignLibOption
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep)             ALens' ForeignLib [ForeignLibOption]
Lens' ForeignLib [ForeignLibOption]
L.foreignLibOptions
    g ForeignLib
  (BuildInfo
   -> Maybe LibVersionInfo -> Maybe Version -> [String] -> ForeignLib)
-> g ForeignLib BuildInfo
-> g ForeignLib
     (Maybe LibVersionInfo -> Maybe Version -> [String] -> ForeignLib)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' ForeignLib BuildInfo
-> g BuildInfo BuildInfo -> g ForeignLib BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' ForeignLib BuildInfo
Lens' ForeignLib BuildInfo
L.foreignLibBuildInfo g BuildInfo BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar
    g ForeignLib
  (Maybe LibVersionInfo -> Maybe Version -> [String] -> ForeignLib)
-> g ForeignLib (Maybe LibVersionInfo)
-> g ForeignLib (Maybe Version -> [String] -> ForeignLib)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' ForeignLib (Maybe LibVersionInfo)
-> g ForeignLib (Maybe LibVersionInfo)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"lib-version-info"                             ALens' ForeignLib (Maybe LibVersionInfo)
Lens' ForeignLib (Maybe LibVersionInfo)
L.foreignLibVersionInfo
    g ForeignLib (Maybe Version -> [String] -> ForeignLib)
-> g ForeignLib (Maybe Version)
-> g ForeignLib ([String] -> ForeignLib)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' ForeignLib (Maybe Version)
-> g ForeignLib (Maybe Version)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"lib-version-linux"                            ALens' ForeignLib (Maybe Version)
Lens' ForeignLib (Maybe Version)
L.foreignLibVersionLinux
    g ForeignLib ([String] -> ForeignLib)
-> g ForeignLib [String] -> g ForeignLib ForeignLib
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' ForeignLib [String]
-> g ForeignLib [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"mod-def-file"      (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT) ALens' ForeignLib [String]
Lens' ForeignLib [String]
L.foreignLibModDefFile
{-# SPECIALIZE foreignLibFieldGrammar :: UnqualComponentName -> ParsecFieldGrammar' ForeignLib #-}
{-# SPECIALIZE foreignLibFieldGrammar :: UnqualComponentName -> PrettyFieldGrammar' ForeignLib #-}

-------------------------------------------------------------------------------
-- Executable
-------------------------------------------------------------------------------

executableFieldGrammar
    :: ( FieldGrammar c g, Applicative (g Executable), Applicative (g BuildInfo)
       , c (Identity ExecutableScope)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String)
       , c (List VCat Token String)
       , c (MQuoted Language)
       )
    => UnqualComponentName -> g Executable Executable
executableFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g Executable),
 Applicative (g BuildInfo), c (Identity ExecutableScope),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String), c (List VCat Token String),
 c (MQuoted Language)) =>
UnqualComponentName -> g Executable Executable
executableFieldGrammar UnqualComponentName
n = UnqualComponentName
-> String -> ExecutableScope -> BuildInfo -> Executable
Executable UnqualComponentName
n
    -- main-is is optional as conditional blocks don't have it
    (String -> ExecutableScope -> BuildInfo -> Executable)
-> g Executable String
-> g Executable (ExecutableScope -> BuildInfo -> Executable)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> (String -> FilePathNT)
-> ALens' Executable String
-> String
-> g Executable String
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b, Eq a) =>
FieldName -> (a -> b) -> ALens' s a -> a -> g s a
optionalFieldDefAla FieldName
"main-is" String -> FilePathNT
FilePathNT ALens' Executable String
Lens' Executable String
L.modulePath String
""
    g Executable (ExecutableScope -> BuildInfo -> Executable)
-> g Executable ExecutableScope
-> g Executable (BuildInfo -> Executable)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Executable ExecutableScope
-> ExecutableScope
-> g Executable ExecutableScope
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
(FieldGrammar c g, Functor (g s), c (Identity a), Eq a) =>
FieldName -> ALens' s a -> a -> g s a
optionalFieldDef    FieldName
"scope"              ALens' Executable ExecutableScope
Lens' Executable ExecutableScope
L.exeScope ExecutableScope
ExecutablePublic
        g Executable ExecutableScope
-> (g Executable ExecutableScope -> g Executable ExecutableScope)
-> g Executable ExecutableScope
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> ExecutableScope
-> g Executable ExecutableScope
-> g Executable ExecutableScope
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_0 ExecutableScope
ExecutablePublic
    g Executable (BuildInfo -> Executable)
-> g Executable BuildInfo -> g Executable Executable
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' Executable BuildInfo
-> g BuildInfo BuildInfo -> g Executable BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' Executable BuildInfo
forall a. HasBuildInfo a => Lens' a BuildInfo
L.buildInfo g BuildInfo BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar
{-# SPECIALIZE executableFieldGrammar :: UnqualComponentName -> ParsecFieldGrammar' Executable #-}
{-# SPECIALIZE executableFieldGrammar :: UnqualComponentName -> PrettyFieldGrammar' Executable #-}

-------------------------------------------------------------------------------
-- TestSuite
-------------------------------------------------------------------------------

-- | An intermediate type just used for parsing the test-suite stanza.
-- After validation it is converted into the proper 'TestSuite' type.
data TestSuiteStanza = TestSuiteStanza
    { TestSuiteStanza -> Maybe TestType
_testStanzaTestType   :: Maybe TestType
    , TestSuiteStanza -> Maybe String
_testStanzaMainIs     :: Maybe FilePath
    , TestSuiteStanza -> Maybe ModuleName
_testStanzaTestModule :: Maybe ModuleName
    , TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo  :: BuildInfo
    }

instance L.HasBuildInfo TestSuiteStanza where
    buildInfo :: Lens' TestSuiteStanza BuildInfo
buildInfo = LensLike f TestSuiteStanza TestSuiteStanza BuildInfo BuildInfo
Lens' TestSuiteStanza BuildInfo
testStanzaBuildInfo

testStanzaTestType :: Lens' TestSuiteStanza (Maybe TestType)
testStanzaTestType :: Lens' TestSuiteStanza (Maybe TestType)
testStanzaTestType Maybe TestType -> f (Maybe TestType)
f TestSuiteStanza
s = (Maybe TestType -> TestSuiteStanza)
-> f (Maybe TestType) -> f TestSuiteStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe TestType
x -> TestSuiteStanza
s { _testStanzaTestType :: Maybe TestType
_testStanzaTestType = Maybe TestType
x }) (Maybe TestType -> f (Maybe TestType)
f (TestSuiteStanza -> Maybe TestType
_testStanzaTestType TestSuiteStanza
s))
{-# INLINE testStanzaTestType #-}

testStanzaMainIs :: Lens' TestSuiteStanza (Maybe FilePath)
testStanzaMainIs :: Lens' TestSuiteStanza (Maybe String)
testStanzaMainIs Maybe String -> f (Maybe String)
f TestSuiteStanza
s = (Maybe String -> TestSuiteStanza)
-> f (Maybe String) -> f TestSuiteStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe String
x -> TestSuiteStanza
s { _testStanzaMainIs :: Maybe String
_testStanzaMainIs = Maybe String
x }) (Maybe String -> f (Maybe String)
f (TestSuiteStanza -> Maybe String
_testStanzaMainIs TestSuiteStanza
s))
{-# INLINE testStanzaMainIs #-}

testStanzaTestModule :: Lens' TestSuiteStanza (Maybe ModuleName)
testStanzaTestModule :: Lens' TestSuiteStanza (Maybe ModuleName)
testStanzaTestModule Maybe ModuleName -> f (Maybe ModuleName)
f TestSuiteStanza
s = (Maybe ModuleName -> TestSuiteStanza)
-> f (Maybe ModuleName) -> f TestSuiteStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe ModuleName
x -> TestSuiteStanza
s { _testStanzaTestModule :: Maybe ModuleName
_testStanzaTestModule = Maybe ModuleName
x }) (Maybe ModuleName -> f (Maybe ModuleName)
f (TestSuiteStanza -> Maybe ModuleName
_testStanzaTestModule TestSuiteStanza
s))
{-# INLINE testStanzaTestModule #-}

testStanzaBuildInfo :: Lens' TestSuiteStanza BuildInfo
testStanzaBuildInfo :: Lens' TestSuiteStanza BuildInfo
testStanzaBuildInfo BuildInfo -> f BuildInfo
f TestSuiteStanza
s = (BuildInfo -> TestSuiteStanza) -> f BuildInfo -> f TestSuiteStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\BuildInfo
x -> TestSuiteStanza
s { _testStanzaBuildInfo :: BuildInfo
_testStanzaBuildInfo = BuildInfo
x }) (BuildInfo -> f BuildInfo
f (TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
s))
{-# INLINE testStanzaBuildInfo #-}

testSuiteFieldGrammar
    :: ( FieldGrammar c g, Applicative (g TestSuiteStanza), Applicative (g BuildInfo)
       , c (Identity ModuleName)
       , c (Identity TestType)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List VCat Token String)
       , c (MQuoted Language)
       )
    => g TestSuiteStanza TestSuiteStanza
testSuiteFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g TestSuiteStanza),
 Applicative (g BuildInfo), c (Identity ModuleName),
 c (Identity TestType),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g TestSuiteStanza TestSuiteStanza
testSuiteFieldGrammar = Maybe TestType
-> Maybe String -> Maybe ModuleName -> BuildInfo -> TestSuiteStanza
TestSuiteStanza
    (Maybe TestType
 -> Maybe String
 -> Maybe ModuleName
 -> BuildInfo
 -> TestSuiteStanza)
-> g TestSuiteStanza (Maybe TestType)
-> g TestSuiteStanza
     (Maybe String -> Maybe ModuleName -> BuildInfo -> TestSuiteStanza)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' TestSuiteStanza (Maybe TestType)
-> g TestSuiteStanza (Maybe TestType)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"type"                   ALens' TestSuiteStanza (Maybe TestType)
Lens' TestSuiteStanza (Maybe TestType)
testStanzaTestType
    g TestSuiteStanza
  (Maybe String -> Maybe ModuleName -> BuildInfo -> TestSuiteStanza)
-> g TestSuiteStanza (Maybe String)
-> g TestSuiteStanza
     (Maybe ModuleName -> BuildInfo -> TestSuiteStanza)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> FilePathNT)
-> ALens' TestSuiteStanza (Maybe String)
-> g TestSuiteStanza (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"main-is"     String -> FilePathNT
FilePathNT ALens' TestSuiteStanza (Maybe String)
Lens' TestSuiteStanza (Maybe String)
testStanzaMainIs
    g TestSuiteStanza
  (Maybe ModuleName -> BuildInfo -> TestSuiteStanza)
-> g TestSuiteStanza (Maybe ModuleName)
-> g TestSuiteStanza (BuildInfo -> TestSuiteStanza)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' TestSuiteStanza (Maybe ModuleName)
-> g TestSuiteStanza (Maybe ModuleName)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"test-module"            ALens' TestSuiteStanza (Maybe ModuleName)
Lens' TestSuiteStanza (Maybe ModuleName)
testStanzaTestModule
    g TestSuiteStanza (BuildInfo -> TestSuiteStanza)
-> g TestSuiteStanza BuildInfo -> g TestSuiteStanza TestSuiteStanza
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' TestSuiteStanza BuildInfo
-> g BuildInfo BuildInfo -> g TestSuiteStanza BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' TestSuiteStanza BuildInfo
Lens' TestSuiteStanza BuildInfo
testStanzaBuildInfo g BuildInfo BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar

validateTestSuite :: Position -> TestSuiteStanza -> ParseResult TestSuite
validateTestSuite :: Position -> TestSuiteStanza -> ParseResult TestSuite
validateTestSuite Position
pos TestSuiteStanza
stanza = case TestSuiteStanza -> Maybe TestType
_testStanzaTestType TestSuiteStanza
stanza of
    Maybe TestType
Nothing -> TestSuite -> ParseResult TestSuite
forall (m :: * -> *) a. Monad m => a -> m a
return (TestSuite -> ParseResult TestSuite)
-> TestSuite -> ParseResult TestSuite
forall a b. (a -> b) -> a -> b
$
        TestSuite
emptyTestSuite { testBuildInfo :: BuildInfo
testBuildInfo = TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
stanza }

    Just tt :: TestType
tt@(TestTypeUnknown String
_ Version
_) ->
        TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
            { testInterface :: TestSuiteInterface
testInterface = TestType -> TestSuiteInterface
TestSuiteUnsupported TestType
tt
            , testBuildInfo :: BuildInfo
testBuildInfo = TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
stanza
            }

    Just TestType
tt | TestType
tt TestType -> [TestType] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [TestType]
knownTestTypes ->
        TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
            { testInterface :: TestSuiteInterface
testInterface = TestType -> TestSuiteInterface
TestSuiteUnsupported TestType
tt
            , testBuildInfo :: BuildInfo
testBuildInfo = TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
stanza
            }

    Just tt :: TestType
tt@(TestTypeExe Version
ver) -> case TestSuiteStanza -> Maybe String
_testStanzaMainIs TestSuiteStanza
stanza of
        Maybe String
Nothing   -> do
            Position -> String -> ParseResult ()
parseFailure Position
pos (String -> TestType -> String
forall {a}. Pretty a => String -> a -> String
missingField String
"main-is" TestType
tt)
            TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
        Just String
file -> do
            Bool -> ParseResult () -> ParseResult ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Maybe ModuleName -> Bool
forall a. Maybe a -> Bool
isJust (TestSuiteStanza -> Maybe ModuleName
_testStanzaTestModule TestSuiteStanza
stanza)) (ParseResult () -> ParseResult ())
-> ParseResult () -> ParseResult ()
forall a b. (a -> b) -> a -> b
$
                Position -> PWarnType -> String -> ParseResult ()
parseWarning Position
pos PWarnType
PWTExtraBenchmarkModule (String -> TestType -> String
forall {a}. Pretty a => String -> a -> String
extraField String
"test-module" TestType
tt)
            TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
                { testInterface :: TestSuiteInterface
testInterface = Version -> String -> TestSuiteInterface
TestSuiteExeV10 Version
ver String
file
                , testBuildInfo :: BuildInfo
testBuildInfo = TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
stanza
                }

    Just tt :: TestType
tt@(TestTypeLib Version
ver) -> case TestSuiteStanza -> Maybe ModuleName
_testStanzaTestModule TestSuiteStanza
stanza of
         Maybe ModuleName
Nothing      -> do
             Position -> String -> ParseResult ()
parseFailure Position
pos (String -> TestType -> String
forall {a}. Pretty a => String -> a -> String
missingField String
"test-module" TestType
tt)
             TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
         Just ModuleName
module_ -> do
            Bool -> ParseResult () -> ParseResult ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Maybe String -> Bool
forall a. Maybe a -> Bool
isJust (TestSuiteStanza -> Maybe String
_testStanzaMainIs TestSuiteStanza
stanza)) (ParseResult () -> ParseResult ())
-> ParseResult () -> ParseResult ()
forall a b. (a -> b) -> a -> b
$
                Position -> PWarnType -> String -> ParseResult ()
parseWarning Position
pos PWarnType
PWTExtraMainIs (String -> TestType -> String
forall {a}. Pretty a => String -> a -> String
extraField String
"main-is" TestType
tt)
            TestSuite -> ParseResult TestSuite
forall (f :: * -> *) a. Applicative f => a -> f a
pure TestSuite
emptyTestSuite
                { testInterface :: TestSuiteInterface
testInterface = Version -> ModuleName -> TestSuiteInterface
TestSuiteLibV09 Version
ver ModuleName
module_
                , testBuildInfo :: BuildInfo
testBuildInfo = TestSuiteStanza -> BuildInfo
_testStanzaBuildInfo TestSuiteStanza
stanza
                }

  where
    missingField :: String -> a -> String
missingField String
name a
tt = String
"The '" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' field is required for the "
                        String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Pretty a => a -> String
prettyShow a
tt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" test suite type."

    extraField :: String -> a -> String
extraField   String
name a
tt = String
"The '" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' field is not used for the '"
                        String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Pretty a => a -> String
prettyShow a
tt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' test suite type."

unvalidateTestSuite :: TestSuite -> TestSuiteStanza
unvalidateTestSuite :: TestSuite -> TestSuiteStanza
unvalidateTestSuite TestSuite
t = TestSuiteStanza
    { _testStanzaTestType :: Maybe TestType
_testStanzaTestType   = Maybe TestType
ty
    , _testStanzaMainIs :: Maybe String
_testStanzaMainIs     = Maybe String
ma
    , _testStanzaTestModule :: Maybe ModuleName
_testStanzaTestModule = Maybe ModuleName
mo
    , _testStanzaBuildInfo :: BuildInfo
_testStanzaBuildInfo  = TestSuite -> BuildInfo
testBuildInfo TestSuite
t
    }
  where
    (Maybe TestType
ty, Maybe String
ma, Maybe ModuleName
mo) = case TestSuite -> TestSuiteInterface
testInterface TestSuite
t of
        TestSuiteExeV10 Version
ver String
file -> (TestType -> Maybe TestType
forall a. a -> Maybe a
Just (TestType -> Maybe TestType) -> TestType -> Maybe TestType
forall a b. (a -> b) -> a -> b
$ Version -> TestType
TestTypeExe Version
ver, String -> Maybe String
forall a. a -> Maybe a
Just String
file, Maybe ModuleName
forall a. Maybe a
Nothing)
        TestSuiteLibV09 Version
ver ModuleName
modu -> (TestType -> Maybe TestType
forall a. a -> Maybe a
Just (TestType -> Maybe TestType) -> TestType -> Maybe TestType
forall a b. (a -> b) -> a -> b
$ Version -> TestType
TestTypeLib Version
ver, Maybe String
forall a. Maybe a
Nothing, ModuleName -> Maybe ModuleName
forall a. a -> Maybe a
Just ModuleName
modu)
        TestSuiteInterface
_                        -> (Maybe TestType
forall a. Maybe a
Nothing, Maybe String
forall a. Maybe a
Nothing, Maybe ModuleName
forall a. Maybe a
Nothing)

-------------------------------------------------------------------------------
-- Benchmark
-------------------------------------------------------------------------------

-- | An intermediate type just used for parsing the benchmark stanza.
-- After validation it is converted into the proper 'Benchmark' type.
data BenchmarkStanza = BenchmarkStanza
    { BenchmarkStanza -> Maybe BenchmarkType
_benchmarkStanzaBenchmarkType   :: Maybe BenchmarkType
    , BenchmarkStanza -> Maybe String
_benchmarkStanzaMainIs          :: Maybe FilePath
    , BenchmarkStanza -> Maybe ModuleName
_benchmarkStanzaBenchmarkModule :: Maybe ModuleName
    , BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo       :: BuildInfo
    }

instance L.HasBuildInfo BenchmarkStanza where
    buildInfo :: Lens' BenchmarkStanza BuildInfo
buildInfo = LensLike f BenchmarkStanza BenchmarkStanza BuildInfo BuildInfo
Lens' BenchmarkStanza BuildInfo
benchmarkStanzaBuildInfo

benchmarkStanzaBenchmarkType :: Lens' BenchmarkStanza (Maybe BenchmarkType)
benchmarkStanzaBenchmarkType :: Lens' BenchmarkStanza (Maybe BenchmarkType)
benchmarkStanzaBenchmarkType Maybe BenchmarkType -> f (Maybe BenchmarkType)
f BenchmarkStanza
s = (Maybe BenchmarkType -> BenchmarkStanza)
-> f (Maybe BenchmarkType) -> f BenchmarkStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe BenchmarkType
x -> BenchmarkStanza
s { _benchmarkStanzaBenchmarkType :: Maybe BenchmarkType
_benchmarkStanzaBenchmarkType = Maybe BenchmarkType
x }) (Maybe BenchmarkType -> f (Maybe BenchmarkType)
f (BenchmarkStanza -> Maybe BenchmarkType
_benchmarkStanzaBenchmarkType BenchmarkStanza
s))
{-# INLINE benchmarkStanzaBenchmarkType #-}

benchmarkStanzaMainIs :: Lens' BenchmarkStanza (Maybe FilePath)
benchmarkStanzaMainIs :: Lens' BenchmarkStanza (Maybe String)
benchmarkStanzaMainIs Maybe String -> f (Maybe String)
f BenchmarkStanza
s = (Maybe String -> BenchmarkStanza)
-> f (Maybe String) -> f BenchmarkStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe String
x -> BenchmarkStanza
s { _benchmarkStanzaMainIs :: Maybe String
_benchmarkStanzaMainIs = Maybe String
x }) (Maybe String -> f (Maybe String)
f (BenchmarkStanza -> Maybe String
_benchmarkStanzaMainIs BenchmarkStanza
s))
{-# INLINE benchmarkStanzaMainIs #-}

benchmarkStanzaBenchmarkModule :: Lens' BenchmarkStanza (Maybe ModuleName)
benchmarkStanzaBenchmarkModule :: Lens' BenchmarkStanza (Maybe ModuleName)
benchmarkStanzaBenchmarkModule Maybe ModuleName -> f (Maybe ModuleName)
f BenchmarkStanza
s = (Maybe ModuleName -> BenchmarkStanza)
-> f (Maybe ModuleName) -> f BenchmarkStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Maybe ModuleName
x -> BenchmarkStanza
s { _benchmarkStanzaBenchmarkModule :: Maybe ModuleName
_benchmarkStanzaBenchmarkModule = Maybe ModuleName
x }) (Maybe ModuleName -> f (Maybe ModuleName)
f (BenchmarkStanza -> Maybe ModuleName
_benchmarkStanzaBenchmarkModule BenchmarkStanza
s))
{-# INLINE benchmarkStanzaBenchmarkModule #-}

benchmarkStanzaBuildInfo :: Lens' BenchmarkStanza BuildInfo
benchmarkStanzaBuildInfo :: Lens' BenchmarkStanza BuildInfo
benchmarkStanzaBuildInfo BuildInfo -> f BuildInfo
f BenchmarkStanza
s = (BuildInfo -> BenchmarkStanza) -> f BuildInfo -> f BenchmarkStanza
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\BuildInfo
x -> BenchmarkStanza
s { _benchmarkStanzaBuildInfo :: BuildInfo
_benchmarkStanzaBuildInfo = BuildInfo
x }) (BuildInfo -> f BuildInfo
f (BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo BenchmarkStanza
s))
{-# INLINE benchmarkStanzaBuildInfo #-}

benchmarkFieldGrammar
    :: ( FieldGrammar c g, Applicative (g BenchmarkStanza), Applicative (g BuildInfo)
       , c (Identity BenchmarkType)
       , c (Identity ModuleName)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List VCat Token String)
       , c (MQuoted Language)
       )
    => g BenchmarkStanza BenchmarkStanza
benchmarkFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BenchmarkStanza),
 Applicative (g BuildInfo), c (Identity BenchmarkType),
 c (Identity ModuleName),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BenchmarkStanza BenchmarkStanza
benchmarkFieldGrammar = Maybe BenchmarkType
-> Maybe String -> Maybe ModuleName -> BuildInfo -> BenchmarkStanza
BenchmarkStanza
    (Maybe BenchmarkType
 -> Maybe String
 -> Maybe ModuleName
 -> BuildInfo
 -> BenchmarkStanza)
-> g BenchmarkStanza (Maybe BenchmarkType)
-> g BenchmarkStanza
     (Maybe String -> Maybe ModuleName -> BuildInfo -> BenchmarkStanza)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' BenchmarkStanza (Maybe BenchmarkType)
-> g BenchmarkStanza (Maybe BenchmarkType)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"type"                        ALens' BenchmarkStanza (Maybe BenchmarkType)
Lens' BenchmarkStanza (Maybe BenchmarkType)
benchmarkStanzaBenchmarkType
    g BenchmarkStanza
  (Maybe String -> Maybe ModuleName -> BuildInfo -> BenchmarkStanza)
-> g BenchmarkStanza (Maybe String)
-> g BenchmarkStanza
     (Maybe ModuleName -> BuildInfo -> BenchmarkStanza)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> FilePathNT)
-> ALens' BenchmarkStanza (Maybe String)
-> g BenchmarkStanza (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"main-is"          String -> FilePathNT
FilePathNT ALens' BenchmarkStanza (Maybe String)
Lens' BenchmarkStanza (Maybe String)
benchmarkStanzaMainIs
    g BenchmarkStanza
  (Maybe ModuleName -> BuildInfo -> BenchmarkStanza)
-> g BenchmarkStanza (Maybe ModuleName)
-> g BenchmarkStanza (BuildInfo -> BenchmarkStanza)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' BenchmarkStanza (Maybe ModuleName)
-> g BenchmarkStanza (Maybe ModuleName)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"benchmark-module"            ALens' BenchmarkStanza (Maybe ModuleName)
Lens' BenchmarkStanza (Maybe ModuleName)
benchmarkStanzaBenchmarkModule
    g BenchmarkStanza (BuildInfo -> BenchmarkStanza)
-> g BenchmarkStanza BuildInfo -> g BenchmarkStanza BenchmarkStanza
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' BenchmarkStanza BuildInfo
-> g BuildInfo BuildInfo -> g BenchmarkStanza BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
blurFieldGrammar ALens' BenchmarkStanza BuildInfo
Lens' BenchmarkStanza BuildInfo
benchmarkStanzaBuildInfo g BuildInfo BuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar

validateBenchmark :: Position -> BenchmarkStanza -> ParseResult Benchmark
validateBenchmark :: Position -> BenchmarkStanza -> ParseResult Benchmark
validateBenchmark Position
pos BenchmarkStanza
stanza = case BenchmarkStanza -> Maybe BenchmarkType
_benchmarkStanzaBenchmarkType BenchmarkStanza
stanza of
    Maybe BenchmarkType
Nothing -> Benchmark -> ParseResult Benchmark
forall (f :: * -> *) a. Applicative f => a -> f a
pure Benchmark
emptyBenchmark
        { benchmarkBuildInfo :: BuildInfo
benchmarkBuildInfo = BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo BenchmarkStanza
stanza }

    Just tt :: BenchmarkType
tt@(BenchmarkTypeUnknown String
_ Version
_) -> Benchmark -> ParseResult Benchmark
forall (f :: * -> *) a. Applicative f => a -> f a
pure Benchmark
emptyBenchmark
        { benchmarkInterface :: BenchmarkInterface
benchmarkInterface = BenchmarkType -> BenchmarkInterface
BenchmarkUnsupported BenchmarkType
tt
        , benchmarkBuildInfo :: BuildInfo
benchmarkBuildInfo = BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo BenchmarkStanza
stanza
        }

    Just BenchmarkType
tt | BenchmarkType
tt BenchmarkType -> [BenchmarkType] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [BenchmarkType]
knownBenchmarkTypes -> Benchmark -> ParseResult Benchmark
forall (f :: * -> *) a. Applicative f => a -> f a
pure Benchmark
emptyBenchmark
        { benchmarkInterface :: BenchmarkInterface
benchmarkInterface = BenchmarkType -> BenchmarkInterface
BenchmarkUnsupported BenchmarkType
tt
        , benchmarkBuildInfo :: BuildInfo
benchmarkBuildInfo = BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo BenchmarkStanza
stanza
        }

    Just tt :: BenchmarkType
tt@(BenchmarkTypeExe Version
ver) -> case BenchmarkStanza -> Maybe String
_benchmarkStanzaMainIs BenchmarkStanza
stanza of
        Maybe String
Nothing   -> do
            Position -> String -> ParseResult ()
parseFailure Position
pos (String -> BenchmarkType -> String
forall {a}. Pretty a => String -> a -> String
missingField String
"main-is" BenchmarkType
tt)
            Benchmark -> ParseResult Benchmark
forall (f :: * -> *) a. Applicative f => a -> f a
pure Benchmark
emptyBenchmark
        Just String
file -> do
            Bool -> ParseResult () -> ParseResult ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Maybe ModuleName -> Bool
forall a. Maybe a -> Bool
isJust (BenchmarkStanza -> Maybe ModuleName
_benchmarkStanzaBenchmarkModule BenchmarkStanza
stanza)) (ParseResult () -> ParseResult ())
-> ParseResult () -> ParseResult ()
forall a b. (a -> b) -> a -> b
$
                Position -> PWarnType -> String -> ParseResult ()
parseWarning Position
pos PWarnType
PWTExtraBenchmarkModule (String -> BenchmarkType -> String
forall {a}. Pretty a => String -> a -> String
extraField String
"benchmark-module" BenchmarkType
tt)
            Benchmark -> ParseResult Benchmark
forall (f :: * -> *) a. Applicative f => a -> f a
pure Benchmark
emptyBenchmark
                { benchmarkInterface :: BenchmarkInterface
benchmarkInterface = Version -> String -> BenchmarkInterface
BenchmarkExeV10 Version
ver String
file
                , benchmarkBuildInfo :: BuildInfo
benchmarkBuildInfo = BenchmarkStanza -> BuildInfo
_benchmarkStanzaBuildInfo BenchmarkStanza
stanza
                }

  where
    missingField :: String -> a -> String
missingField String
name a
tt = String
"The '" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' field is required for the "
                        String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Pretty a => a -> String
prettyShow a
tt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" benchmark type."

    extraField :: String -> a -> String
extraField   String
name a
tt = String
"The '" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
name String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' field is not used for the '"
                        String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Pretty a => a -> String
prettyShow a
tt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"' benchmark type."

unvalidateBenchmark :: Benchmark -> BenchmarkStanza
unvalidateBenchmark :: Benchmark -> BenchmarkStanza
unvalidateBenchmark Benchmark
b = BenchmarkStanza
    { _benchmarkStanzaBenchmarkType :: Maybe BenchmarkType
_benchmarkStanzaBenchmarkType   = Maybe BenchmarkType
ty
    , _benchmarkStanzaMainIs :: Maybe String
_benchmarkStanzaMainIs          = Maybe String
ma
    , _benchmarkStanzaBenchmarkModule :: Maybe ModuleName
_benchmarkStanzaBenchmarkModule = Maybe ModuleName
forall a. Maybe a
mo
    , _benchmarkStanzaBuildInfo :: BuildInfo
_benchmarkStanzaBuildInfo       = Benchmark -> BuildInfo
benchmarkBuildInfo Benchmark
b
    }
  where
    (Maybe BenchmarkType
ty, Maybe String
ma, Maybe a
mo) = case Benchmark -> BenchmarkInterface
benchmarkInterface Benchmark
b of
        BenchmarkExeV10 Version
ver String
""  -> (BenchmarkType -> Maybe BenchmarkType
forall a. a -> Maybe a
Just (BenchmarkType -> Maybe BenchmarkType)
-> BenchmarkType -> Maybe BenchmarkType
forall a b. (a -> b) -> a -> b
$ Version -> BenchmarkType
BenchmarkTypeExe Version
ver, Maybe String
forall a. Maybe a
Nothing,  Maybe a
forall a. Maybe a
Nothing)
        BenchmarkExeV10 Version
ver String
ma' -> (BenchmarkType -> Maybe BenchmarkType
forall a. a -> Maybe a
Just (BenchmarkType -> Maybe BenchmarkType)
-> BenchmarkType -> Maybe BenchmarkType
forall a b. (a -> b) -> a -> b
$ Version -> BenchmarkType
BenchmarkTypeExe Version
ver, String -> Maybe String
forall a. a -> Maybe a
Just String
ma', Maybe a
forall a. Maybe a
Nothing)
        BenchmarkInterface
_                       -> (Maybe BenchmarkType
forall a. Maybe a
Nothing, Maybe String
forall a. Maybe a
Nothing,  Maybe a
forall a. Maybe a
Nothing)

-------------------------------------------------------------------------------
-- Build info
-------------------------------------------------------------------------------

buildInfoFieldGrammar
    :: ( FieldGrammar c g, Applicative (g BuildInfo)
       , c (List CommaFSep (Identity ExeDependency) ExeDependency)
       , c (List CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
       , c (List CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
       , c (List CommaVCat (Identity Dependency) Dependency)
       , c (List CommaVCat (Identity Mixin) Mixin)
       , c (List FSep (MQuoted Extension) Extension)
       , c (List FSep (MQuoted Language) Language)
       , c (List FSep FilePathNT String)
       , c (List FSep Token String)
       , c (List NoCommaFSep Token' String)
       , c (List VCat (MQuoted ModuleName) ModuleName)
       , c (List VCat FilePathNT String)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       , c (List VCat Token String)
       , c (MQuoted Language)
       )
    => g BuildInfo BuildInfo
buildInfoFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BuildInfo BuildInfo
buildInfoFieldGrammar = Bool
-> [LegacyExeDependency]
-> [ExeDependency]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [PkgconfigDependency]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [SymbolicPath PackageDir SourceDir]
-> [ModuleName]
-> [ModuleName]
-> [ModuleName]
-> Maybe Language
-> [Language]
-> [Extension]
-> [Extension]
-> [Extension]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> [String]
-> PerCompilerFlavor [String]
-> PerCompilerFlavor [String]
-> PerCompilerFlavor [String]
-> PerCompilerFlavor [String]
-> [(String, String)]
-> [Dependency]
-> [Mixin]
-> BuildInfo
BuildInfo
    (Bool
 -> [LegacyExeDependency]
 -> [ExeDependency]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [PkgconfigDependency]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [SymbolicPath PackageDir SourceDir]
 -> [ModuleName]
 -> [ModuleName]
 -> [ModuleName]
 -> Maybe Language
 -> [Language]
 -> [Extension]
 -> [Extension]
 -> [Extension]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> [String]
 -> PerCompilerFlavor [String]
 -> PerCompilerFlavor [String]
 -> PerCompilerFlavor [String]
 -> PerCompilerFlavor [String]
 -> [(String, String)]
 -> [Dependency]
 -> [Mixin]
 -> BuildInfo)
-> g BuildInfo Bool
-> g BuildInfo
     ([LegacyExeDependency]
      -> [ExeDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName -> ALens' BuildInfo Bool -> Bool -> g BuildInfo Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
booleanFieldDef  FieldName
"buildable"                                          ALens' BuildInfo Bool
forall a. HasBuildInfo a => Lens' a Bool
L.buildable Bool
True
    g BuildInfo
  ([LegacyExeDependency]
   -> [ExeDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [LegacyExeDependency]
-> g BuildInfo
     ([ExeDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([LegacyExeDependency]
    -> List
         CommaFSep (Identity LegacyExeDependency) LegacyExeDependency)
-> ALens' BuildInfo [LegacyExeDependency]
-> g BuildInfo [LegacyExeDependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"build-tools"          (CommaFSep
-> [LegacyExeDependency]
-> List
     CommaFSep (Identity LegacyExeDependency) LegacyExeDependency
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList  CommaFSep
CommaFSep)          ALens' BuildInfo [LegacyExeDependency]
forall a. HasBuildInfo a => Lens' a [LegacyExeDependency]
L.buildTools
        g BuildInfo [LegacyExeDependency]
-> (g BuildInfo [LegacyExeDependency]
    -> g BuildInfo [LegacyExeDependency])
-> g BuildInfo [LegacyExeDependency]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String
-> g BuildInfo [LegacyExeDependency]
-> g BuildInfo [LegacyExeDependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
deprecatedSince CabalSpecVersion
CabalSpecV2_0
            String
"Please use 'build-tool-depends' field"
        g BuildInfo [LegacyExeDependency]
-> (g BuildInfo [LegacyExeDependency]
    -> g BuildInfo [LegacyExeDependency])
-> g BuildInfo [LegacyExeDependency]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String
-> g BuildInfo [LegacyExeDependency]
-> g BuildInfo [LegacyExeDependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
removedIn CabalSpecVersion
CabalSpecV3_0
            String
"Please use 'build-tool-depends' field."
    g BuildInfo
  ([ExeDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [ExeDependency]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ExeDependency]
    -> List CommaFSep (Identity ExeDependency) ExeDependency)
-> ALens' BuildInfo [ExeDependency]
-> g BuildInfo [ExeDependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"build-tool-depends"   (CommaFSep
-> [ExeDependency]
-> List CommaFSep (Identity ExeDependency) ExeDependency
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList  CommaFSep
CommaFSep)          ALens' BuildInfo [ExeDependency]
forall a. HasBuildInfo a => Lens' a [ExeDependency]
L.buildToolDepends
        -- {- ^^^ availableSince [2,0] [] -}
        -- here, we explicitly want to recognise build-tool-depends for all Cabal files
        -- as otherwise cabal new-build cannot really work.
        --
        -- I.e. we don't want trigger unknown field warning
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cpp-options"          (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cppOptions
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"asm-options"          (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.asmOptions
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cmm-options"          (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cmmOptions
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cc-options"           (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.ccOptions
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cxx-options"          (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cxxOptions
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_2 []
    g BuildInfo
  ([String]
   -> [String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ld-options"           (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.ldOptions
    g BuildInfo
  ([String]
   -> [PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([PkgconfigDependency]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"hsc2hs-options"       (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.hsc2hsOptions
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_6 []
    g BuildInfo
  ([PkgconfigDependency]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [PkgconfigDependency]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([PkgconfigDependency]
    -> List
         CommaFSep (Identity PkgconfigDependency) PkgconfigDependency)
-> ALens' BuildInfo [PkgconfigDependency]
-> g BuildInfo [PkgconfigDependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"pkgconfig-depends"    (CommaFSep
-> [PkgconfigDependency]
-> List
     CommaFSep (Identity PkgconfigDependency) PkgconfigDependency
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList  CommaFSep
CommaFSep)          ALens' BuildInfo [PkgconfigDependency]
forall a. HasBuildInfo a => Lens' a [PkgconfigDependency]
L.pkgconfigDepends
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"frameworks"           (FSep -> (String -> Token) -> [String] -> List FSep Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> Token
Token)         ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.frameworks
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-framework-dirs" (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraFrameworkDirs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"asm-sources"          (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.asmSources
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cmm-sources"          (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cmmSources
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"c-sources"            (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cSources
    g BuildInfo
  ([String]
   -> [String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"cxx-sources"          (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.cxxSources
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_2 []
    g BuildInfo
  ([String]
   -> [SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([SymbolicPath PackageDir SourceDir]
      -> [ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"js-sources"           (VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.jsSources
    g BuildInfo
  ([SymbolicPath PackageDir SourceDir]
   -> [ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo
     ([ModuleName]
      -> [ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir))) =>
g BuildInfo [SymbolicPath PackageDir SourceDir]
hsSourceDirsGrammar
    g BuildInfo
  ([ModuleName]
   -> [ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [ModuleName]
-> g BuildInfo
     ([ModuleName]
      -> [ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ModuleName] -> List VCat (MQuoted ModuleName) ModuleName)
-> ALens' BuildInfo [ModuleName]
-> g BuildInfo [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"other-modules"        [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatOtherModules            ALens' BuildInfo [ModuleName]
forall a. HasBuildInfo a => Lens' a [ModuleName]
L.otherModules
    g BuildInfo
  ([ModuleName]
   -> [ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [ModuleName]
-> g BuildInfo
     ([ModuleName]
      -> Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ModuleName] -> List VCat (MQuoted ModuleName) ModuleName)
-> ALens' BuildInfo [ModuleName]
-> g BuildInfo [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"virtual-modules"      (VCat
-> (ModuleName -> MQuoted ModuleName)
-> [ModuleName]
-> List VCat (MQuoted ModuleName) ModuleName
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat ModuleName -> MQuoted ModuleName
forall a. a -> MQuoted a
MQuoted)       ALens' BuildInfo [ModuleName]
forall a. HasBuildInfo a => Lens' a [ModuleName]
L.virtualModules
        g BuildInfo [ModuleName]
-> (g BuildInfo [ModuleName] -> g BuildInfo [ModuleName])
-> g BuildInfo [ModuleName]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [ModuleName]
-> g BuildInfo [ModuleName]
-> g BuildInfo [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_2 []
    g BuildInfo
  ([ModuleName]
   -> Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [ModuleName]
-> g BuildInfo
     (Maybe Language
      -> [Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([ModuleName] -> List VCat (MQuoted ModuleName) ModuleName)
-> ALens' BuildInfo [ModuleName]
-> g BuildInfo [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"autogen-modules"      (VCat
-> (ModuleName -> MQuoted ModuleName)
-> [ModuleName]
-> List VCat (MQuoted ModuleName) ModuleName
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat ModuleName -> MQuoted ModuleName
forall a. a -> MQuoted a
MQuoted)       ALens' BuildInfo [ModuleName]
forall a. HasBuildInfo a => Lens' a [ModuleName]
L.autogenModules
        g BuildInfo [ModuleName]
-> (g BuildInfo [ModuleName] -> g BuildInfo [ModuleName])
-> g BuildInfo [ModuleName]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [ModuleName]
-> g BuildInfo [ModuleName]
-> g BuildInfo [ModuleName]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_0 []
    g BuildInfo
  (Maybe Language
   -> [Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo (Maybe Language)
-> g BuildInfo
     ([Language]
      -> [Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Language -> MQuoted Language)
-> ALens' BuildInfo (Maybe Language)
-> g BuildInfo (Maybe Language)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"default-language"     Language -> MQuoted Language
forall a. a -> MQuoted a
MQuoted                       ALens' BuildInfo (Maybe Language)
forall a. HasBuildInfo a => Lens' a (Maybe Language)
L.defaultLanguage
        g BuildInfo (Maybe Language)
-> (g BuildInfo (Maybe Language) -> g BuildInfo (Maybe Language))
-> g BuildInfo (Maybe Language)
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> Maybe Language
-> g BuildInfo (Maybe Language)
-> g BuildInfo (Maybe Language)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV1_10 Maybe Language
forall a. Maybe a
Nothing
    g BuildInfo
  ([Language]
   -> [Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [Language]
-> g BuildInfo
     ([Extension]
      -> [Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Language] -> List FSep (MQuoted Language) Language)
-> ALens' BuildInfo [Language]
-> g BuildInfo [Language]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"other-languages"      (FSep
-> (Language -> MQuoted Language)
-> [Language]
-> List FSep (MQuoted Language) Language
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep Language -> MQuoted Language
forall a. a -> MQuoted a
MQuoted)       ALens' BuildInfo [Language]
forall a. HasBuildInfo a => Lens' a [Language]
L.otherLanguages
        g BuildInfo [Language]
-> (g BuildInfo [Language] -> g BuildInfo [Language])
-> g BuildInfo [Language]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [Language] -> g BuildInfo [Language] -> g BuildInfo [Language]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV1_10 []
    g BuildInfo
  ([Extension]
   -> [Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [Extension]
-> g BuildInfo
     ([Extension]
      -> [Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Extension] -> List FSep (MQuoted Extension) Extension)
-> ALens' BuildInfo [Extension]
-> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"default-extensions"   (FSep
-> (Extension -> MQuoted Extension)
-> [Extension]
-> List FSep (MQuoted Extension) Extension
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep Extension -> MQuoted Extension
forall a. a -> MQuoted a
MQuoted)       ALens' BuildInfo [Extension]
forall a. HasBuildInfo a => Lens' a [Extension]
L.defaultExtensions
        g BuildInfo [Extension]
-> (g BuildInfo [Extension] -> g BuildInfo [Extension])
-> g BuildInfo [Extension]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [Extension]
-> g BuildInfo [Extension]
-> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV1_10 []
    g BuildInfo
  ([Extension]
   -> [Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [Extension]
-> g BuildInfo
     ([Extension]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Extension] -> List FSep (MQuoted Extension) Extension)
-> ALens' BuildInfo [Extension]
-> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"other-extensions"     [Extension] -> List FSep (MQuoted Extension) Extension
formatOtherExtensions         ALens' BuildInfo [Extension]
forall a. HasBuildInfo a => Lens' a [Extension]
L.otherExtensions
        g BuildInfo [Extension]
-> (g BuildInfo [Extension] -> g BuildInfo [Extension])
-> g BuildInfo [Extension]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> g BuildInfo [Extension] -> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> g s a -> g s a
availableSinceWarn CabalSpecVersion
CabalSpecV1_10
    g BuildInfo
  ([Extension]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [Extension]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Extension] -> List FSep (MQuoted Extension) Extension)
-> ALens' BuildInfo [Extension]
-> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extensions"           (FSep
-> (Extension -> MQuoted Extension)
-> [Extension]
-> List FSep (MQuoted Extension) Extension
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep Extension -> MQuoted Extension
forall a. a -> MQuoted a
MQuoted)       ALens' BuildInfo [Extension]
forall a. HasBuildInfo a => Lens' a [Extension]
L.oldExtensions
        g BuildInfo [Extension]
-> (g BuildInfo [Extension] -> g BuildInfo [Extension])
-> g BuildInfo [Extension]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String -> g BuildInfo [Extension] -> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
deprecatedSince CabalSpecVersion
CabalSpecV1_12
            String
"Please use 'default-extensions' or 'other-extensions' fields."
        g BuildInfo [Extension]
-> (g BuildInfo [Extension] -> g BuildInfo [Extension])
-> g BuildInfo [Extension]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String -> g BuildInfo [Extension] -> g BuildInfo [Extension]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
removedIn CabalSpecVersion
CabalSpecV3_0
            String
"Please use 'default-extensions' or 'other-extensions' fields."
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-libraries"      (VCat -> (String -> Token) -> [String] -> List VCat Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> Token
Token)         ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraLibs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-ghci-libraries" (VCat -> (String -> Token) -> [String] -> List VCat Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> Token
Token)         ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraGHCiLibs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-bundled-libraries" (VCat -> (String -> Token) -> [String] -> List VCat Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> Token
Token)      ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraBundledLibs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-library-flavours" (VCat -> (String -> Token) -> [String] -> List VCat Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> Token
Token)       ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraLibFlavours
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List VCat Token String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-dynamic-library-flavours" (VCat -> (String -> Token) -> [String] -> List VCat Token String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> Token
Token) ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraDynLibFlavours
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"extra-lib-dirs"       (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.extraLibDirs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"include-dirs"         (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.includeDirs
    g BuildInfo
  ([String]
   -> [String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"includes"             (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.includes
    g BuildInfo
  ([String]
   -> [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     ([String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"autogen-includes"     (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.autogenIncludes
        g BuildInfo [String]
-> (g BuildInfo [String] -> g BuildInfo [String])
-> g BuildInfo [String]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [String] -> g BuildInfo [String] -> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV3_0 []
    g BuildInfo
  ([String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo [String]
-> g BuildInfo
     (PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep FilePathNT String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"install-includes"     (FSep
-> (String -> FilePathNT)
-> [String]
-> List FSep FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep String -> FilePathNT
FilePathNT)    ALens' BuildInfo [String]
forall a. HasBuildInfo a => Lens' a [String]
L.installIncludes
    g BuildInfo
  (PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo
     (PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g BuildInfo (PerCompilerFlavor [String])
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
optionsFieldGrammar
    g BuildInfo
  (PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo
     (PerCompilerFlavor [String]
      -> PerCompilerFlavor [String]
      -> [(String, String)]
      -> [Dependency]
      -> [Mixin]
      -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g BuildInfo (PerCompilerFlavor [String])
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
profOptionsFieldGrammar
    g BuildInfo
  (PerCompilerFlavor [String]
   -> PerCompilerFlavor [String]
   -> [(String, String)]
   -> [Dependency]
   -> [Mixin]
   -> BuildInfo)
-> g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo
     (PerCompilerFlavor [String]
      -> [(String, String)] -> [Dependency] -> [Mixin] -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> g BuildInfo (PerCompilerFlavor [String])
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
sharedOptionsFieldGrammar
    g BuildInfo
  (PerCompilerFlavor [String]
   -> [(String, String)] -> [Dependency] -> [Mixin] -> BuildInfo)
-> g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo
     ([(String, String)] -> [Dependency] -> [Mixin] -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> PerCompilerFlavor [String]
-> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a. Applicative f => a -> f a
pure PerCompilerFlavor [String]
forall a. Monoid a => a
mempty -- static-options ???
    g BuildInfo
  ([(String, String)] -> [Dependency] -> [Mixin] -> BuildInfo)
-> g BuildInfo [(String, String)]
-> g BuildInfo ([Dependency] -> [Mixin] -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' BuildInfo [(String, String)]
-> g BuildInfo [(String, String)]
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s [(String, String)] -> g s [(String, String)]
prefixedFields   FieldName
"x-"                                                 ALens' BuildInfo [(String, String)]
forall a. HasBuildInfo a => Lens' a [(String, String)]
L.customFieldsBI
    g BuildInfo ([Dependency] -> [Mixin] -> BuildInfo)
-> g BuildInfo [Dependency] -> g BuildInfo ([Mixin] -> BuildInfo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Dependency]
    -> List CommaVCat (Identity Dependency) Dependency)
-> ALens' BuildInfo [Dependency]
-> g BuildInfo [Dependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"build-depends"        [Dependency] -> List CommaVCat (Identity Dependency) Dependency
formatDependencyList          ALens' BuildInfo [Dependency]
forall a. HasBuildInfo a => Lens' a [Dependency]
L.targetBuildDepends
    g BuildInfo ([Mixin] -> BuildInfo)
-> g BuildInfo [Mixin] -> g BuildInfo BuildInfo
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Mixin] -> List CommaVCat (Identity Mixin) Mixin)
-> ALens' BuildInfo [Mixin]
-> g BuildInfo [Mixin]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"mixins"               [Mixin] -> List CommaVCat (Identity Mixin) Mixin
formatMixinList               ALens' BuildInfo [Mixin]
forall a. HasBuildInfo a => Lens' a [Mixin]
L.mixins
        g BuildInfo [Mixin]
-> (g BuildInfo [Mixin] -> g BuildInfo [Mixin])
-> g BuildInfo [Mixin]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> [Mixin] -> g BuildInfo [Mixin] -> g BuildInfo [Mixin]
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
FieldGrammar c g =>
CabalSpecVersion -> a -> g s a -> g s a
availableSince CabalSpecVersion
CabalSpecV2_0 []
{-# SPECIALIZE buildInfoFieldGrammar :: ParsecFieldGrammar' BuildInfo #-}
{-# SPECIALIZE buildInfoFieldGrammar :: PrettyFieldGrammar' BuildInfo #-}

hsSourceDirsGrammar
    :: ( FieldGrammar c g, Applicative (g BuildInfo)
       , c (List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir))
       )
    => g BuildInfo [SymbolicPath PackageDir SourceDir]
hsSourceDirsGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir))) =>
g BuildInfo [SymbolicPath PackageDir SourceDir]
hsSourceDirsGrammar = [SymbolicPath PackageDir SourceDir]
-> [SymbolicPath PackageDir SourceDir]
-> [SymbolicPath PackageDir SourceDir]
forall a. [a] -> [a] -> [a]
(++)
    ([SymbolicPath PackageDir SourceDir]
 -> [SymbolicPath PackageDir SourceDir]
 -> [SymbolicPath PackageDir SourceDir])
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo
     ([SymbolicPath PackageDir SourceDir]
      -> [SymbolicPath PackageDir SourceDir])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([SymbolicPath PackageDir SourceDir]
    -> List
         FSep
         (Identity (SymbolicPath PackageDir SourceDir))
         (SymbolicPath PackageDir SourceDir))
-> ALens' BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"hs-source-dirs" [SymbolicPath PackageDir SourceDir]
-> List
     FSep
     (Identity (SymbolicPath PackageDir SourceDir))
     (SymbolicPath PackageDir SourceDir)
formatHsSourceDirs ALens' BuildInfo [SymbolicPath PackageDir SourceDir]
forall a.
HasBuildInfo a =>
Lens' a [SymbolicPath PackageDir SourceDir]
L.hsSourceDirs
    g BuildInfo
  ([SymbolicPath PackageDir SourceDir]
   -> [SymbolicPath PackageDir SourceDir])
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([SymbolicPath PackageDir SourceDir]
    -> List
         FSep
         (Identity (SymbolicPath PackageDir SourceDir))
         (SymbolicPath PackageDir SourceDir))
-> ALens' BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"hs-source-dir"  (FSep
-> [SymbolicPath PackageDir SourceDir]
-> List
     FSep
     (Identity (SymbolicPath PackageDir SourceDir))
     (SymbolicPath PackageDir SourceDir)
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep) ALens' BuildInfo [SymbolicPath PackageDir SourceDir]
forall (f :: * -> *).
Functor f =>
LensLike' f BuildInfo [SymbolicPath PackageDir SourceDir]
wrongLens
        --- https://github.com/haskell/cabal/commit/49e3cdae3bdf21b017ccd42e66670ca402e22b44
        g BuildInfo [SymbolicPath PackageDir SourceDir]
-> (g BuildInfo [SymbolicPath PackageDir SourceDir]
    -> g BuildInfo [SymbolicPath PackageDir SourceDir])
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
deprecatedSince CabalSpecVersion
CabalSpecV1_2 String
"Please use 'hs-source-dirs'"
        g BuildInfo [SymbolicPath PackageDir SourceDir]
-> (g BuildInfo [SymbolicPath PackageDir SourceDir]
    -> g BuildInfo [SymbolicPath PackageDir SourceDir])
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall a b. a -> (a -> b) -> b
^^^ CabalSpecVersion
-> String
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
-> g BuildInfo [SymbolicPath PackageDir SourceDir]
forall (c :: * -> Constraint) (g :: * -> * -> *) s a.
FieldGrammar c g =>
CabalSpecVersion -> String -> g s a -> g s a
removedIn CabalSpecVersion
CabalSpecV3_0 String
"Please use 'hs-source-dirs' field."
  where
    -- TODO: make pretty printer aware of CabalSpecVersion
    wrongLens :: Functor f => LensLike' f BuildInfo [SymbolicPath PackageDir SourceDir]
    wrongLens :: forall (f :: * -> *).
Functor f =>
LensLike' f BuildInfo [SymbolicPath PackageDir SourceDir]
wrongLens [SymbolicPath PackageDir SourceDir]
-> f [SymbolicPath PackageDir SourceDir]
f BuildInfo
bi = (\[SymbolicPath PackageDir SourceDir]
fps -> ASetter
  BuildInfo
  BuildInfo
  [SymbolicPath PackageDir SourceDir]
  [SymbolicPath PackageDir SourceDir]
-> [SymbolicPath PackageDir SourceDir] -> BuildInfo -> BuildInfo
forall s t a b. ASetter s t a b -> b -> s -> t
set ASetter
  BuildInfo
  BuildInfo
  [SymbolicPath PackageDir SourceDir]
  [SymbolicPath PackageDir SourceDir]
forall a.
HasBuildInfo a =>
Lens' a [SymbolicPath PackageDir SourceDir]
L.hsSourceDirs [SymbolicPath PackageDir SourceDir]
fps BuildInfo
bi) ([SymbolicPath PackageDir SourceDir] -> BuildInfo)
-> f [SymbolicPath PackageDir SourceDir] -> f BuildInfo
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [SymbolicPath PackageDir SourceDir]
-> f [SymbolicPath PackageDir SourceDir]
f []

optionsFieldGrammar
    :: (FieldGrammar c g, Applicative (g BuildInfo), c (List NoCommaFSep Token' String))
    => g BuildInfo (PerCompilerFlavor [String])
optionsFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
optionsFieldGrammar = [String] -> [String] -> PerCompilerFlavor [String]
forall v. v -> v -> PerCompilerFlavor v
PerCompilerFlavor
    ([String] -> [String] -> PerCompilerFlavor [String])
-> g BuildInfo [String]
-> g BuildInfo ([String] -> PerCompilerFlavor [String])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghc-options"   (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHC)
    g BuildInfo ([String] -> PerCompilerFlavor [String])
-> g BuildInfo [String] -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghcjs-options" (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHCJS)
    -- NOTE: Hugs, NHC and JHC are not supported anymore, but these
    -- fields are kept around so that we can still parse legacy .cabal
    -- files that have them.
    g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo () -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<*  FieldName -> g BuildInfo ()
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> g s ()
knownField FieldName
"jhc-options"
    g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo () -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<*  FieldName -> g BuildInfo ()
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> g s ()
knownField FieldName
"hugs-options"
    g BuildInfo (PerCompilerFlavor [String])
-> g BuildInfo () -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<*  FieldName -> g BuildInfo ()
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> g s ()
knownField FieldName
"nhc98-options"
  where
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
flavor = LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
forall a. HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
L.options LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
-> (([String] -> Pretext [String] [String] [String])
    -> PerCompilerFlavor [String]
    -> Pretext [String] [String] (PerCompilerFlavor [String]))
-> ALens' BuildInfo [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompilerFlavor
-> ([String] -> Pretext [String] [String] [String])
-> PerCompilerFlavor [String]
-> Pretext [String] [String] (PerCompilerFlavor [String])
forall (f :: * -> *) v.
(Functor f, Monoid v) =>
CompilerFlavor -> LensLike' f (PerCompilerFlavor v) v
lookupLens CompilerFlavor
flavor

profOptionsFieldGrammar
    :: (FieldGrammar c g, Applicative (g BuildInfo), c (List NoCommaFSep Token' String))
    => g BuildInfo (PerCompilerFlavor [String])
profOptionsFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
profOptionsFieldGrammar = [String] -> [String] -> PerCompilerFlavor [String]
forall v. v -> v -> PerCompilerFlavor v
PerCompilerFlavor
    ([String] -> [String] -> PerCompilerFlavor [String])
-> g BuildInfo [String]
-> g BuildInfo ([String] -> PerCompilerFlavor [String])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghc-prof-options"   (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHC)
    g BuildInfo ([String] -> PerCompilerFlavor [String])
-> g BuildInfo [String] -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghcjs-prof-options" (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHCJS)
  where
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
flavor = LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
forall a. HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
L.profOptions LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
-> (([String] -> Pretext [String] [String] [String])
    -> PerCompilerFlavor [String]
    -> Pretext [String] [String] (PerCompilerFlavor [String]))
-> ALens' BuildInfo [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompilerFlavor
-> ([String] -> Pretext [String] [String] [String])
-> PerCompilerFlavor [String]
-> Pretext [String] [String] (PerCompilerFlavor [String])
forall (f :: * -> *) v.
(Functor f, Monoid v) =>
CompilerFlavor -> LensLike' f (PerCompilerFlavor v) v
lookupLens CompilerFlavor
flavor

sharedOptionsFieldGrammar
    :: (FieldGrammar c g, Applicative (g BuildInfo), c (List NoCommaFSep Token' String))
    => g BuildInfo (PerCompilerFlavor [String])
sharedOptionsFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BuildInfo),
 c (List NoCommaFSep Token' String)) =>
g BuildInfo (PerCompilerFlavor [String])
sharedOptionsFieldGrammar = [String] -> [String] -> PerCompilerFlavor [String]
forall v. v -> v -> PerCompilerFlavor v
PerCompilerFlavor
    ([String] -> [String] -> PerCompilerFlavor [String])
-> g BuildInfo [String]
-> g BuildInfo ([String] -> PerCompilerFlavor [String])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghc-shared-options"   (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHC)
    g BuildInfo ([String] -> PerCompilerFlavor [String])
-> g BuildInfo [String] -> g BuildInfo (PerCompilerFlavor [String])
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' BuildInfo [String]
-> g BuildInfo [String]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"ghcjs-shared-options" (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' NoCommaFSep
NoCommaFSep String -> Token'
Token') (CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
GHCJS)
  where
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
    extract :: CompilerFlavor -> ALens' BuildInfo [String]
extract CompilerFlavor
flavor = LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
forall a. HasBuildInfo a => Lens' a (PerCompilerFlavor [String])
L.sharedOptions LensLike
  (Pretext [String] [String])
  BuildInfo
  BuildInfo
  (PerCompilerFlavor [String])
  (PerCompilerFlavor [String])
-> (([String] -> Pretext [String] [String] [String])
    -> PerCompilerFlavor [String]
    -> Pretext [String] [String] (PerCompilerFlavor [String]))
-> ALens' BuildInfo [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompilerFlavor
-> ([String] -> Pretext [String] [String] [String])
-> PerCompilerFlavor [String]
-> Pretext [String] [String] (PerCompilerFlavor [String])
forall (f :: * -> *) v.
(Functor f, Monoid v) =>
CompilerFlavor -> LensLike' f (PerCompilerFlavor v) v
lookupLens CompilerFlavor
flavor

lookupLens :: (Functor f, Monoid v) => CompilerFlavor -> LensLike' f (PerCompilerFlavor v) v
lookupLens :: forall (f :: * -> *) v.
(Functor f, Monoid v) =>
CompilerFlavor -> LensLike' f (PerCompilerFlavor v) v
lookupLens CompilerFlavor
k v -> f v
f p :: PerCompilerFlavor v
p@(PerCompilerFlavor v
ghc v
ghcjs)
    | CompilerFlavor
k CompilerFlavor -> CompilerFlavor -> Bool
forall a. Eq a => a -> a -> Bool
== CompilerFlavor
GHC   = (\v
n -> v -> v -> PerCompilerFlavor v
forall v. v -> v -> PerCompilerFlavor v
PerCompilerFlavor v
n v
ghcjs) (v -> PerCompilerFlavor v) -> f v -> f (PerCompilerFlavor v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> v -> f v
f v
ghc
    | CompilerFlavor
k CompilerFlavor -> CompilerFlavor -> Bool
forall a. Eq a => a -> a -> Bool
== CompilerFlavor
GHCJS = (\v
n -> v -> v -> PerCompilerFlavor v
forall v. v -> v -> PerCompilerFlavor v
PerCompilerFlavor v
ghc v
n) (v -> PerCompilerFlavor v) -> f v -> f (PerCompilerFlavor v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> v -> f v
f v
ghcjs
    | Bool
otherwise  = PerCompilerFlavor v
p PerCompilerFlavor v -> f v -> f (PerCompilerFlavor v)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ v -> f v
f v
forall a. Monoid a => a
mempty

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

flagFieldGrammar
    :: (FieldGrammar c g, Applicative (g PackageFlag))
    =>  FlagName -> g PackageFlag PackageFlag
flagFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g PackageFlag)) =>
FlagName -> g PackageFlag PackageFlag
flagFieldGrammar FlagName
name = FlagName -> String -> Bool -> Bool -> PackageFlag
MkPackageFlag FlagName
name
    (String -> Bool -> Bool -> PackageFlag)
-> g PackageFlag String
-> g PackageFlag (Bool -> Bool -> PackageFlag)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName -> ALens' PackageFlag String -> g PackageFlag String
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s String -> g s String
freeTextFieldDef    FieldName
"description"          ALens' PackageFlag String
Lens' PackageFlag String
L.flagDescription
    g PackageFlag (Bool -> Bool -> PackageFlag)
-> g PackageFlag Bool -> g PackageFlag (Bool -> PackageFlag)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' PackageFlag Bool -> Bool -> g PackageFlag Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
booleanFieldDef     FieldName
"default"              ALens' PackageFlag Bool
Lens' PackageFlag Bool
L.flagDefault     Bool
True
    g PackageFlag (Bool -> PackageFlag)
-> g PackageFlag Bool -> g PackageFlag PackageFlag
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' PackageFlag Bool -> Bool -> g PackageFlag Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
booleanFieldDef     FieldName
"manual"               ALens' PackageFlag Bool
Lens' PackageFlag Bool
L.flagManual      Bool
False
{-# SPECIALIZE flagFieldGrammar :: FlagName -> ParsecFieldGrammar' PackageFlag #-}
{-# SPECIALIZE flagFieldGrammar :: FlagName -> PrettyFieldGrammar' PackageFlag #-}

-------------------------------------------------------------------------------
-- SourceRepo
-------------------------------------------------------------------------------

sourceRepoFieldGrammar
    :: (FieldGrammar c g, Applicative (g SourceRepo), c (Identity RepoType), c Token, c FilePathNT)
    => RepoKind -> g SourceRepo SourceRepo
sourceRepoFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g SourceRepo),
 c (Identity RepoType), c Token, c FilePathNT) =>
RepoKind -> g SourceRepo SourceRepo
sourceRepoFieldGrammar RepoKind
kind = RepoKind
-> Maybe RepoType
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> SourceRepo
SourceRepo RepoKind
kind
    (Maybe RepoType
 -> Maybe String
 -> Maybe String
 -> Maybe String
 -> Maybe String
 -> Maybe String
 -> SourceRepo)
-> g SourceRepo (Maybe RepoType)
-> g SourceRepo
     (Maybe String
      -> Maybe String
      -> Maybe String
      -> Maybe String
      -> Maybe String
      -> SourceRepo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ALens' SourceRepo (Maybe RepoType)
-> g SourceRepo (Maybe RepoType)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
optionalField    FieldName
"type"                ALens' SourceRepo (Maybe RepoType)
Lens' SourceRepo (Maybe RepoType)
L.repoType
    g SourceRepo
  (Maybe String
   -> Maybe String
   -> Maybe String
   -> Maybe String
   -> Maybe String
   -> SourceRepo)
-> g SourceRepo (Maybe String)
-> g SourceRepo
     (Maybe String
      -> Maybe String -> Maybe String -> Maybe String -> SourceRepo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' SourceRepo (Maybe String) -> g SourceRepo (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s (Maybe String) -> g s (Maybe String)
freeTextField    FieldName
"location"            ALens' SourceRepo (Maybe String)
Lens' SourceRepo (Maybe String)
L.repoLocation
    g SourceRepo
  (Maybe String
   -> Maybe String -> Maybe String -> Maybe String -> SourceRepo)
-> g SourceRepo (Maybe String)
-> g SourceRepo
     (Maybe String -> Maybe String -> Maybe String -> SourceRepo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> Token)
-> ALens' SourceRepo (Maybe String)
-> g SourceRepo (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"module"   String -> Token
Token      ALens' SourceRepo (Maybe String)
Lens' SourceRepo (Maybe String)
L.repoModule
    g SourceRepo
  (Maybe String -> Maybe String -> Maybe String -> SourceRepo)
-> g SourceRepo (Maybe String)
-> g SourceRepo (Maybe String -> Maybe String -> SourceRepo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> Token)
-> ALens' SourceRepo (Maybe String)
-> g SourceRepo (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"branch"   String -> Token
Token      ALens' SourceRepo (Maybe String)
Lens' SourceRepo (Maybe String)
L.repoBranch
    g SourceRepo (Maybe String -> Maybe String -> SourceRepo)
-> g SourceRepo (Maybe String)
-> g SourceRepo (Maybe String -> SourceRepo)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> Token)
-> ALens' SourceRepo (Maybe String)
-> g SourceRepo (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"tag"      String -> Token
Token      ALens' SourceRepo (Maybe String)
Lens' SourceRepo (Maybe String)
L.repoTag
    g SourceRepo (Maybe String -> SourceRepo)
-> g SourceRepo (Maybe String) -> g SourceRepo SourceRepo
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> FilePathNT)
-> ALens' SourceRepo (Maybe String)
-> g SourceRepo (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s (Maybe a) -> g s (Maybe a)
optionalFieldAla FieldName
"subdir"   String -> FilePathNT
FilePathNT ALens' SourceRepo (Maybe String)
Lens' SourceRepo (Maybe String)
L.repoSubdir
{-# SPECIALIZE sourceRepoFieldGrammar :: RepoKind -> ParsecFieldGrammar' SourceRepo #-}
{-# SPECIALIZE sourceRepoFieldGrammar :: RepoKind -> PrettyFieldGrammar' SourceRepo #-}

-------------------------------------------------------------------------------
-- SetupBuildInfo
-------------------------------------------------------------------------------

setupBInfoFieldGrammar
    :: (FieldGrammar c g, Functor (g SetupBuildInfo), c (List CommaVCat (Identity Dependency) Dependency))
    => Bool -> g SetupBuildInfo SetupBuildInfo
setupBInfoFieldGrammar :: forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Functor (g SetupBuildInfo),
 c (List CommaVCat (Identity Dependency) Dependency)) =>
Bool -> g SetupBuildInfo SetupBuildInfo
setupBInfoFieldGrammar Bool
def = ([Dependency] -> Bool -> SetupBuildInfo)
-> Bool -> [Dependency] -> SetupBuildInfo
forall a b c. (a -> b -> c) -> b -> a -> c
flip [Dependency] -> Bool -> SetupBuildInfo
SetupBuildInfo Bool
def
    ([Dependency] -> SetupBuildInfo)
-> g SetupBuildInfo [Dependency] -> g SetupBuildInfo SetupBuildInfo
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> ([Dependency]
    -> List CommaVCat (Identity Dependency) Dependency)
-> ALens' SetupBuildInfo [Dependency]
-> g SetupBuildInfo [Dependency]
forall (c :: * -> Constraint) (g :: * -> * -> *) b a s.
(FieldGrammar c g, c b, Monoid a, Newtype a b) =>
FieldName -> (a -> b) -> ALens' s a -> g s a
monoidalFieldAla FieldName
"setup-depends" (CommaVCat
-> [Dependency] -> List CommaVCat (Identity Dependency) Dependency
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList CommaVCat
CommaVCat) ALens' SetupBuildInfo [Dependency]
Lens' SetupBuildInfo [Dependency]
L.setupDepends
{-# SPECIALIZE setupBInfoFieldGrammar :: Bool -> ParsecFieldGrammar' SetupBuildInfo #-}
{-# SPECIALIZE setupBInfoFieldGrammar :: Bool -> PrettyFieldGrammar' SetupBuildInfo #-}

-------------------------------------------------------------------------------
-- Define how field values should be formatted for 'pretty'.
-------------------------------------------------------------------------------

formatDependencyList :: [Dependency] -> List CommaVCat (Identity Dependency) Dependency
formatDependencyList :: [Dependency] -> List CommaVCat (Identity Dependency) Dependency
formatDependencyList = CommaVCat
-> [Dependency] -> List CommaVCat (Identity Dependency) Dependency
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList CommaVCat
CommaVCat

formatMixinList :: [Mixin] -> List CommaVCat (Identity Mixin) Mixin
formatMixinList :: [Mixin] -> List CommaVCat (Identity Mixin) Mixin
formatMixinList = CommaVCat -> [Mixin] -> List CommaVCat (Identity Mixin) Mixin
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList CommaVCat
CommaVCat

formatExtraSourceFiles :: [FilePath] -> List VCat FilePathNT FilePath
formatExtraSourceFiles :: [String] -> List VCat FilePathNT String
formatExtraSourceFiles = VCat
-> (String -> FilePathNT)
-> [String]
-> List VCat FilePathNT String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat String -> FilePathNT
FilePathNT

formatExposedModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatExposedModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatExposedModules = VCat
-> (ModuleName -> MQuoted ModuleName)
-> [ModuleName]
-> List VCat (MQuoted ModuleName) ModuleName
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat ModuleName -> MQuoted ModuleName
forall a. a -> MQuoted a
MQuoted

formatHsSourceDirs :: [SymbolicPath PackageDir SourceDir] -> List FSep (Identity (SymbolicPath PackageDir SourceDir)) (SymbolicPath PackageDir SourceDir)
formatHsSourceDirs :: [SymbolicPath PackageDir SourceDir]
-> List
     FSep
     (Identity (SymbolicPath PackageDir SourceDir))
     (SymbolicPath PackageDir SourceDir)
formatHsSourceDirs = FSep
-> [SymbolicPath PackageDir SourceDir]
-> List
     FSep
     (Identity (SymbolicPath PackageDir SourceDir))
     (SymbolicPath PackageDir SourceDir)
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep

formatOtherExtensions :: [Extension] -> List FSep (MQuoted Extension) Extension
formatOtherExtensions :: [Extension] -> List FSep (MQuoted Extension) Extension
formatOtherExtensions = FSep
-> (Extension -> MQuoted Extension)
-> [Extension]
-> List FSep (MQuoted Extension) Extension
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' FSep
FSep Extension -> MQuoted Extension
forall a. a -> MQuoted a
MQuoted

formatOtherModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatOtherModules :: [ModuleName] -> List VCat (MQuoted ModuleName) ModuleName
formatOtherModules = VCat
-> (ModuleName -> MQuoted ModuleName)
-> [ModuleName]
-> List VCat (MQuoted ModuleName) ModuleName
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
alaList' VCat
VCat ModuleName -> MQuoted ModuleName
forall a. a -> MQuoted a
MQuoted

-------------------------------------------------------------------------------
-- newtypes
-------------------------------------------------------------------------------

-- | Compat FilePath accepts empty file path,
-- but issues a warning.
--
-- There are simply too many (~1200) package definition files
--
-- @
-- license-file: ""
-- @
--
-- and
--
-- @
-- data-dir: ""
-- @
--
-- across Hackage to outrule them completely.
-- I suspect some of them are generated (e.g. formatted) by machine.
--
newtype CompatFilePath = CompatFilePath { CompatFilePath -> String
getCompatFilePath :: FilePath } -- TODO: Change to use SymPath

instance Newtype String CompatFilePath

instance Parsec CompatFilePath where
    parsec :: forall (m :: * -> *). CabalParsing m => m CompatFilePath
parsec = do
        String
token <- m String
forall (m :: * -> *). CabalParsing m => m String
parsecToken
        if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
token
        then do
            PWarnType -> String -> m ()
forall (m :: * -> *). CabalParsing m => PWarnType -> String -> m ()
parsecWarning PWarnType
PWTEmptyFilePath String
"empty FilePath"
            CompatFilePath -> m CompatFilePath
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> CompatFilePath
CompatFilePath String
"")
        else CompatFilePath -> m CompatFilePath
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> CompatFilePath
CompatFilePath String
token)

instance Pretty CompatFilePath where
    pretty :: CompatFilePath -> Doc
pretty = String -> Doc
showToken (String -> Doc)
-> (CompatFilePath -> String) -> CompatFilePath -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompatFilePath -> String
getCompatFilePath

newtype CompatLicenseFile = CompatLicenseFile { CompatLicenseFile -> [SymbolicPath PackageDir LicenseFile]
getCompatLicenseFile :: [SymbolicPath PackageDir LicenseFile] }

instance Newtype [SymbolicPath PackageDir LicenseFile] CompatLicenseFile

-- TODO
instance Parsec CompatLicenseFile where
    parsec :: forall (m :: * -> *). CabalParsing m => m CompatLicenseFile
parsec = m CompatLicenseFile
emptyToken m CompatLicenseFile -> m CompatLicenseFile -> m CompatLicenseFile
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile
CompatLicenseFile ([SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile)
-> (List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile)
    -> [SymbolicPath PackageDir LicenseFile])
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
-> CompatLicenseFile
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([SymbolicPath PackageDir LicenseFile]
 -> List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile))
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
-> [SymbolicPath PackageDir LicenseFile]
forall o n. Newtype o n => (o -> n) -> n -> o
unpack' (FSep
-> [SymbolicPath PackageDir LicenseFile]
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep) (List
   FSep
   (Identity (SymbolicPath PackageDir LicenseFile))
   (SymbolicPath PackageDir LicenseFile)
 -> CompatLicenseFile)
-> m (List
        FSep
        (Identity (SymbolicPath PackageDir LicenseFile))
        (SymbolicPath PackageDir LicenseFile))
-> m CompatLicenseFile
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile))
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
parsec
      where
        emptyToken :: m CompatLicenseFile
emptyToken = m CompatLicenseFile -> m CompatLicenseFile
forall (m :: * -> *) a. Parsing m => m a -> m a
P.try (m CompatLicenseFile -> m CompatLicenseFile)
-> m CompatLicenseFile -> m CompatLicenseFile
forall a b. (a -> b) -> a -> b
$ do
            String
token <- m String
forall (m :: * -> *). CabalParsing m => m String
parsecToken
            if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
token
            then CompatLicenseFile -> m CompatLicenseFile
forall (m :: * -> *) a. Monad m => a -> m a
return ([SymbolicPath PackageDir LicenseFile] -> CompatLicenseFile
CompatLicenseFile [])
            else String -> m CompatLicenseFile
forall (m :: * -> *) a. Parsing m => String -> m a
P.unexpected String
"non-empty-token"

instance Pretty CompatLicenseFile where
    pretty :: CompatLicenseFile -> Doc
pretty = List
  FSep
  (Identity (SymbolicPath PackageDir LicenseFile))
  (SymbolicPath PackageDir LicenseFile)
-> Doc
forall a. Pretty a => a -> Doc
pretty (List
   FSep
   (Identity (SymbolicPath PackageDir LicenseFile))
   (SymbolicPath PackageDir LicenseFile)
 -> Doc)
-> (CompatLicenseFile
    -> List
         FSep
         (Identity (SymbolicPath PackageDir LicenseFile))
         (SymbolicPath PackageDir LicenseFile))
-> CompatLicenseFile
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([SymbolicPath PackageDir LicenseFile]
 -> List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile))
-> [SymbolicPath PackageDir LicenseFile]
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
forall o n. Newtype o n => (o -> n) -> o -> n
pack' (FSep
-> [SymbolicPath PackageDir LicenseFile]
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
forall sep a. sep -> [a] -> List sep (Identity a) a
alaList FSep
FSep) ([SymbolicPath PackageDir LicenseFile]
 -> List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile))
-> (CompatLicenseFile -> [SymbolicPath PackageDir LicenseFile])
-> CompatLicenseFile
-> List
     FSep
     (Identity (SymbolicPath PackageDir LicenseFile))
     (SymbolicPath PackageDir LicenseFile)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CompatLicenseFile -> [SymbolicPath PackageDir LicenseFile]
getCompatLicenseFile

-------------------------------------------------------------------------------
-- vim syntax definitions
-------------------------------------------------------------------------------

-- | '_syntaxFieldNames' and '_syntaxExtensions'
-- are for generating VIM syntax file definitions.
--
_syntaxFieldNames :: IO ()
_syntaxFieldNames :: IO ()
_syntaxFieldNames = [IO ()] -> IO ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_
    [ FieldName -> IO ()
BS8.putStrLn (FieldName -> IO ()) -> FieldName -> IO ()
forall a b. (a -> b) -> a -> b
$ FieldName
" \\ " FieldName -> FieldName -> FieldName
forall a. Semigroup a => a -> a -> a
<> FieldName
n
    | FieldName
n <- [FieldName] -> [FieldName]
forall a. Eq a => [a] -> [a]
nub ([FieldName] -> [FieldName]) -> [FieldName] -> [FieldName]
forall a b. (a -> b) -> a -> b
$ [FieldName] -> [FieldName]
forall a. Ord a => [a] -> [a]
sort ([FieldName] -> [FieldName]) -> [FieldName] -> [FieldName]
forall a b. (a -> b) -> a -> b
$ [[FieldName]] -> [FieldName]
forall a. Monoid a => [a] -> a
mconcat
        [ ParsecFieldGrammar PackageDescription PackageDescription
-> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList ParsecFieldGrammar PackageDescription PackageDescription
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g PackageDescription),
 Applicative (g PackageIdentifier), c (Identity BuildType),
 c (Identity PackageName), c (Identity Version),
 c (List FSep FilePathNT String),
 c (List FSep CompatFilePath String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir LicenseFile))
      (SymbolicPath PackageDir LicenseFile)),
 c (List FSep TestedWith (CompilerFlavor, VersionRange)),
 c (List VCat FilePathNT String), c FilePathNT, c CompatLicenseFile,
 c CompatFilePath, c SpecLicense, c SpecVersion) =>
g PackageDescription PackageDescription
packageDescriptionFieldGrammar
        , ParsecFieldGrammar Library Library -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar Library Library -> [FieldName])
-> ParsecFieldGrammar Library Library -> [FieldName]
forall a b. (a -> b) -> a -> b
$ LibraryName -> ParsecFieldGrammar Library Library
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g Library),
 Applicative (g BuildInfo), c (Identity LibraryVisibility),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List CommaVCat (Identity ModuleReexport) ModuleReexport),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
LibraryName -> g Library Library
libraryFieldGrammar LibraryName
LMainLibName
        , ParsecFieldGrammar Executable Executable -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar Executable Executable -> [FieldName])
-> ParsecFieldGrammar Executable Executable -> [FieldName]
forall a b. (a -> b) -> a -> b
$ UnqualComponentName -> ParsecFieldGrammar Executable Executable
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g Executable),
 Applicative (g BuildInfo), c (Identity ExecutableScope),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String), c (List VCat Token String),
 c (MQuoted Language)) =>
UnqualComponentName -> g Executable Executable
executableFieldGrammar UnqualComponentName
"exe"
        , ParsecFieldGrammar ForeignLib ForeignLib -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar ForeignLib ForeignLib -> [FieldName])
-> ParsecFieldGrammar ForeignLib ForeignLib -> [FieldName]
forall a b. (a -> b) -> a -> b
$ UnqualComponentName -> ParsecFieldGrammar ForeignLib ForeignLib
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g ForeignLib),
 Applicative (g BuildInfo), c (Identity ForeignLibType),
 c (Identity LibVersionInfo), c (Identity Version),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (Identity ForeignLibOption) ForeignLibOption),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String), c (List VCat Token String),
 c (MQuoted Language)) =>
UnqualComponentName -> g ForeignLib ForeignLib
foreignLibFieldGrammar UnqualComponentName
"flib"
        , ParsecFieldGrammar TestSuiteStanza TestSuiteStanza -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList ParsecFieldGrammar TestSuiteStanza TestSuiteStanza
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g TestSuiteStanza),
 Applicative (g BuildInfo), c (Identity ModuleName),
 c (Identity TestType),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g TestSuiteStanza TestSuiteStanza
testSuiteFieldGrammar
        , ParsecFieldGrammar BenchmarkStanza BenchmarkStanza -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList ParsecFieldGrammar BenchmarkStanza BenchmarkStanza
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g BenchmarkStanza),
 Applicative (g BuildInfo), c (Identity BenchmarkType),
 c (Identity ModuleName),
 c (List CommaFSep (Identity ExeDependency) ExeDependency),
 c (List
      CommaFSep (Identity LegacyExeDependency) LegacyExeDependency),
 c (List
      CommaFSep (Identity PkgconfigDependency) PkgconfigDependency),
 c (List CommaVCat (Identity Dependency) Dependency),
 c (List CommaVCat (Identity Mixin) Mixin),
 c (List FSep (MQuoted Extension) Extension),
 c (List FSep (MQuoted Language) Language),
 c (List FSep FilePathNT String), c (List FSep Token String),
 c (List NoCommaFSep Token' String),
 c (List VCat (MQuoted ModuleName) ModuleName),
 c (List VCat FilePathNT String),
 c (List
      FSep
      (Identity (SymbolicPath PackageDir SourceDir))
      (SymbolicPath PackageDir SourceDir)),
 c (List VCat Token String), c (MQuoted Language)) =>
g BenchmarkStanza BenchmarkStanza
benchmarkFieldGrammar
        , ParsecFieldGrammar PackageFlag PackageFlag -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar PackageFlag PackageFlag -> [FieldName])
-> ParsecFieldGrammar PackageFlag PackageFlag -> [FieldName]
forall a b. (a -> b) -> a -> b
$ FlagName -> ParsecFieldGrammar PackageFlag PackageFlag
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g PackageFlag)) =>
FlagName -> g PackageFlag PackageFlag
flagFieldGrammar (String -> FlagName
forall a. HasCallStack => String -> a
error String
"flagname")
        , ParsecFieldGrammar SourceRepo SourceRepo -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar SourceRepo SourceRepo -> [FieldName])
-> ParsecFieldGrammar SourceRepo SourceRepo -> [FieldName]
forall a b. (a -> b) -> a -> b
$ RepoKind -> ParsecFieldGrammar SourceRepo SourceRepo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Applicative (g SourceRepo),
 c (Identity RepoType), c Token, c FilePathNT) =>
RepoKind -> g SourceRepo SourceRepo
sourceRepoFieldGrammar (String -> RepoKind
forall a. HasCallStack => String -> a
error String
"repokind")
        , ParsecFieldGrammar SetupBuildInfo SetupBuildInfo -> [FieldName]
forall s a. ParsecFieldGrammar s a -> [FieldName]
fieldGrammarKnownFieldList (ParsecFieldGrammar SetupBuildInfo SetupBuildInfo -> [FieldName])
-> ParsecFieldGrammar SetupBuildInfo SetupBuildInfo -> [FieldName]
forall a b. (a -> b) -> a -> b
$ Bool -> ParsecFieldGrammar SetupBuildInfo SetupBuildInfo
forall (c :: * -> Constraint) (g :: * -> * -> *).
(FieldGrammar c g, Functor (g SetupBuildInfo),
 c (List CommaVCat (Identity Dependency) Dependency)) =>
Bool -> g SetupBuildInfo SetupBuildInfo
setupBInfoFieldGrammar Bool
True
        ]
    ]

_syntaxExtensions :: IO ()
_syntaxExtensions :: IO ()
_syntaxExtensions = [IO ()] -> IO ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_
    [ String -> IO ()
putStrLn (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"  \\ " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
e
    | String
e <- [String
"Safe",String
"Trustworthy",String
"Unsafe"]
        [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
es
        [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (String
"No"String -> String -> String
forall a. [a] -> [a] -> [a]
++) [String]
es
    ]
  where
    es :: [String]
es = [String] -> [String]
forall a. Eq a => [a] -> [a]
nub ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String] -> [String]
forall a. Ord a => [a] -> [a]
sort
          [ KnownExtension -> String
forall a. Pretty a => a -> String
prettyShow KnownExtension
e
          | KnownExtension
e <- [ KnownExtension
forall a. Bounded a => a
minBound .. KnownExtension
forall a. Bounded a => a
maxBound ]
          , KnownExtension
e KnownExtension -> [KnownExtension] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [KnownExtension
Safe,KnownExtension
Unsafe,KnownExtension
Trustworthy]
          ]