{-# LANGUAGE ConstraintKinds       #-}
{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE FlexibleInstances     #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE TypeApplications      #-}
module HaskellCI.Config where

import HaskellCI.Prelude

import Distribution.Simple.Utils (fromUTF8BS)

import qualified Data.ByteString                 as BS
import qualified Data.Map                        as M
import qualified Data.Set                        as S
import qualified Distribution.CabalSpecVersion   as C
import qualified Distribution.Compat.CharParsing as C
import qualified Distribution.Compat.Newtype     as C
import qualified Distribution.FieldGrammar       as C
import qualified Distribution.Fields             as C
import qualified Distribution.Parsec             as C
import qualified Distribution.Pretty             as C
import qualified Distribution.Types.PackageName  as C
import qualified Distribution.Types.Version      as C
import qualified Distribution.Types.VersionRange as C
import qualified Text.PrettyPrint                as PP

import HaskellCI.Config.ConstraintSet
import HaskellCI.Config.CopyFields
import HaskellCI.Config.Docspec
import HaskellCI.Config.Doctest
import HaskellCI.Config.Folds
import HaskellCI.Config.HLint
import HaskellCI.Config.Installed
import HaskellCI.Config.Jobs
import HaskellCI.Config.PackageScope
import HaskellCI.Config.Ubuntu
import HaskellCI.Newtypes
import HaskellCI.OptionsGrammar
import HaskellCI.ParsecUtils
import HaskellCI.TestedWith

defaultHeadHackage :: VersionRange
defaultHeadHackage :: VersionRange
defaultHeadHackage = Version -> VersionRange
C.orLaterVersion ([Int] -> Version
C.mkVersion [Int
9,Int
1])

-- TODO: split other blocks like DoctestConfig
data Config = Config
    { Config -> Maybe Version
cfgCabalInstallVersion :: Maybe Version
    , Config -> Maybe Jobs
cfgJobs                :: Maybe Jobs
    , Config -> Ubuntu
cfgUbuntu              :: !Ubuntu
    , Config -> TestedWithJobs
cfgTestedWith          :: !TestedWithJobs
    , Config -> CopyFields
cfgCopyFields          :: !CopyFields
    , Config -> [String]
cfgLocalGhcOptions     :: [String]
    , Config -> Bool
cfgSubmodules          :: !Bool
    , Config -> Bool
cfgCache               :: !Bool
    , Config -> Bool
cfgInstallDeps         :: !Bool
    , Config -> [Installed]
cfgInstalled           :: [Installed]
    , Config -> VersionRange
cfgTests               :: !VersionRange
    , Config -> VersionRange
cfgRunTests            :: !VersionRange
    , Config -> VersionRange
cfgBenchmarks          :: !VersionRange
    , Config -> VersionRange
cfgHaddock             :: !VersionRange
    , Config -> VersionRange
cfgNoTestsNoBench      :: !VersionRange
    , Config -> VersionRange
cfgUnconstrainted      :: !VersionRange
    , Config -> VersionRange
cfgHeadHackage         :: !VersionRange
    , Config -> Bool
cfgGhcjsTests          :: !Bool
    , Config -> [PackageName]
cfgGhcjsTools          :: ![C.PackageName]
    , Config -> Bool
cfgTestOutputDirect    :: !Bool
    , Config -> Bool
cfgCheck               :: !Bool
    , Config -> [String]
cfgOnlyBranches        :: [String]
    , Config -> [String]
cfgIrcChannels         :: [String]
    , Config -> Bool
cfgIrcIfInOriginRepo   :: Bool
    , Config -> Bool
cfgEmailNotifications  :: Bool
    , Config -> Maybe String
cfgProjectName         :: Maybe String
    , Config -> Set Fold
cfgFolds               :: S.Set Fold
    , Config -> Bool
cfgGhcHead             :: !Bool
    , Config -> Bool
cfgPostgres            :: !Bool
    , Config -> Bool
cfgGoogleChrome        :: !Bool
    , Config -> Map Version String
cfgEnv                 :: M.Map Version String
    , Config -> VersionRange
cfgAllowFailures       :: !VersionRange
    , Config -> Bool
cfgLastInSeries        :: !Bool
    , Config -> Set Version
cfgOsx                 :: S.Set Version
    , Config -> Set String
cfgApt                 :: S.Set String
    , Config -> [String]
cfgTravisPatches       :: [FilePath]
    , Config -> [String]
cfgGitHubPatches       :: [FilePath]
    , Config -> Bool
cfgInsertVersion       :: !Bool
    , Config -> PackageScope
cfgErrorMissingMethods :: !PackageScope
    , Config -> DoctestConfig
cfgDoctest             :: !DoctestConfig
    , Config -> DocspecConfig
cfgDocspec             :: !DocspecConfig
    , Config -> HLintConfig
cfgHLint               :: !HLintConfig
    , Config -> [ConstraintSet]
cfgConstraintSets      :: [ConstraintSet]
    , Config -> [PrettyField ()]
cfgRawProject          :: [C.PrettyField ()]
    , Config -> String
cfgRawTravis           :: !String
    , Config -> Maybe String
cfgGitHubActionName    :: !(Maybe String)
    }
  deriving ((forall x. Config -> Rep Config x)
-> (forall x. Rep Config x -> Config) -> Generic Config
forall x. Rep Config x -> Config
forall x. Config -> Rep Config x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Config x -> Config
$cfrom :: forall x. Config -> Rep Config x
Generic)

defaultCabalInstallVersion :: Maybe Version
defaultCabalInstallVersion :: Maybe Version
defaultCabalInstallVersion = Version -> Maybe Version
forall a. a -> Maybe a
Just ([Int] -> Version
C.mkVersion [Int
3,Int
4])

emptyConfig :: Config
emptyConfig :: Config
emptyConfig = Config :: Maybe Version
-> Maybe Jobs
-> Ubuntu
-> TestedWithJobs
-> CopyFields
-> [String]
-> Bool
-> Bool
-> Bool
-> [Installed]
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> Bool
-> [PackageName]
-> Bool
-> Bool
-> [String]
-> [String]
-> Bool
-> Bool
-> Maybe String
-> Set Fold
-> Bool
-> Bool
-> Bool
-> Map Version String
-> VersionRange
-> Bool
-> Set Version
-> Set String
-> [String]
-> [String]
-> Bool
-> PackageScope
-> DoctestConfig
-> DocspecConfig
-> HLintConfig
-> [ConstraintSet]
-> [PrettyField ()]
-> String
-> Maybe String
-> Config
Config
    { cfgCabalInstallVersion :: Maybe Version
cfgCabalInstallVersion = Maybe Version
defaultCabalInstallVersion
    , cfgJobs :: Maybe Jobs
cfgJobs            = Maybe Jobs
forall a. Maybe a
Nothing
    , cfgUbuntu :: Ubuntu
cfgUbuntu          = Ubuntu
Xenial
    , cfgTestedWith :: TestedWithJobs
cfgTestedWith      = TestedWithJobs
TestedWithUniform
    , cfgCopyFields :: CopyFields
cfgCopyFields      = CopyFields
CopyFieldsSome
    , cfgDoctest :: DoctestConfig
cfgDoctest         = DoctestConfig
defaultDoctestConfig
    , cfgDocspec :: DocspecConfig
cfgDocspec         = DocspecConfig
defaultDocspecConfig
    , cfgHLint :: HLintConfig
cfgHLint           = HLintConfig
defaultHLintConfig
    , cfgLocalGhcOptions :: [String]
cfgLocalGhcOptions = []
    , cfgConstraintSets :: [ConstraintSet]
cfgConstraintSets  = []
    , cfgSubmodules :: Bool
cfgSubmodules      = Bool
False
    , cfgCache :: Bool
cfgCache           = Bool
True
    , cfgInstalled :: [Installed]
cfgInstalled       = []
    , cfgInstallDeps :: Bool
cfgInstallDeps     = Bool
True
    , cfgTests :: VersionRange
cfgTests           = VersionRange
anyVersion
    , cfgRunTests :: VersionRange
cfgRunTests        = VersionRange
anyVersion
    , cfgBenchmarks :: VersionRange
cfgBenchmarks      = VersionRange
anyVersion
    , cfgHaddock :: VersionRange
cfgHaddock         = VersionRange
anyVersion
    , cfgNoTestsNoBench :: VersionRange
cfgNoTestsNoBench  = VersionRange
anyVersion
    , cfgUnconstrainted :: VersionRange
cfgUnconstrainted  = VersionRange
anyVersion
    , cfgHeadHackage :: VersionRange
cfgHeadHackage     = VersionRange
defaultHeadHackage
    , cfgGhcjsTests :: Bool
cfgGhcjsTests      = Bool
False
    , cfgGhcjsTools :: [PackageName]
cfgGhcjsTools      = []
    , cfgTestOutputDirect :: Bool
cfgTestOutputDirect = Bool
True
    , cfgCheck :: Bool
cfgCheck           = Bool
True
    , cfgOnlyBranches :: [String]
cfgOnlyBranches    = []
    , cfgIrcChannels :: [String]
cfgIrcChannels     = []
    , cfgIrcIfInOriginRepo :: Bool
cfgIrcIfInOriginRepo  = Bool
False
    , cfgEmailNotifications :: Bool
cfgEmailNotifications = Bool
True
    , cfgProjectName :: Maybe String
cfgProjectName     = Maybe String
forall a. Maybe a
Nothing
    , cfgFolds :: Set Fold
cfgFolds           = Set Fold
forall a. Set a
S.empty
    , cfgGhcHead :: Bool
cfgGhcHead         = Bool
False
    , cfgPostgres :: Bool
cfgPostgres        = Bool
False
    , cfgGoogleChrome :: Bool
cfgGoogleChrome    = Bool
False
    , cfgEnv :: Map Version String
cfgEnv             = Map Version String
forall k a. Map k a
M.empty
    , cfgAllowFailures :: VersionRange
cfgAllowFailures   = VersionRange
noVersion
    , cfgLastInSeries :: Bool
cfgLastInSeries    = Bool
False
    , cfgOsx :: Set Version
cfgOsx             = Set Version
forall a. Set a
S.empty
    , cfgApt :: Set String
cfgApt             = Set String
forall a. Set a
S.empty
    , cfgTravisPatches :: [String]
cfgTravisPatches   = []
    , cfgGitHubPatches :: [String]
cfgGitHubPatches   = []
    , cfgInsertVersion :: Bool
cfgInsertVersion   = Bool
True
    , cfgRawProject :: [PrettyField ()]
cfgRawProject      = []
    , cfgRawTravis :: String
cfgRawTravis       = String
""
    , cfgGitHubActionName :: Maybe String
cfgGitHubActionName = Maybe String
forall a. Maybe a
Nothing
    , cfgErrorMissingMethods :: PackageScope
cfgErrorMissingMethods = PackageScope
PackageScopeLocal
    }

-------------------------------------------------------------------------------
-- Grammar
-------------------------------------------------------------------------------

configGrammar
    :: ( OptionsGrammar c g, Applicative (g Config)
       , c (Identity HLintJob)
       , c (Identity PackageScope)
       , c (Identity TestedWithJobs)
       , c (Identity Ubuntu)
       , c (Identity Jobs)
       , c (Identity CopyFields)
       , c Env, c Folds, c CopyFields, c HeadVersion
       , c (C.List C.FSep (Identity Installed) Installed)
       , Applicative (g DoctestConfig)
       , Applicative (g DocspecConfig)
       , Applicative (g HLintConfig))
    => g Config Config
configGrammar :: g Config Config
configGrammar = Maybe Version
-> Maybe Jobs
-> Ubuntu
-> TestedWithJobs
-> CopyFields
-> [String]
-> Bool
-> Bool
-> Bool
-> [Installed]
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> VersionRange
-> Bool
-> [PackageName]
-> Bool
-> Bool
-> [String]
-> [String]
-> Bool
-> Bool
-> Maybe String
-> Set Fold
-> Bool
-> Bool
-> Bool
-> Map Version String
-> VersionRange
-> Bool
-> Set Version
-> Set String
-> [String]
-> [String]
-> Bool
-> PackageScope
-> DoctestConfig
-> DocspecConfig
-> HLintConfig
-> [ConstraintSet]
-> [PrettyField ()]
-> String
-> Maybe String
-> Config
Config
    (Maybe Version
 -> Maybe Jobs
 -> Ubuntu
 -> TestedWithJobs
 -> CopyFields
 -> [String]
 -> Bool
 -> Bool
 -> Bool
 -> [Installed]
 -> VersionRange
 -> VersionRange
 -> VersionRange
 -> VersionRange
 -> VersionRange
 -> VersionRange
 -> VersionRange
 -> Bool
 -> [PackageName]
 -> Bool
 -> Bool
 -> [String]
 -> [String]
 -> Bool
 -> Bool
 -> Maybe String
 -> Set Fold
 -> Bool
 -> Bool
 -> Bool
 -> Map Version String
 -> VersionRange
 -> Bool
 -> Set Version
 -> Set String
 -> [String]
 -> [String]
 -> Bool
 -> PackageScope
 -> DoctestConfig
 -> DocspecConfig
 -> HLintConfig
 -> [ConstraintSet]
 -> [PrettyField ()]
 -> String
 -> Maybe String
 -> Config)
-> g Config (Maybe Version)
-> g Config
     (Maybe Jobs
      -> Ubuntu
      -> TestedWithJobs
      -> CopyFields
      -> [String]
      -> Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> FieldName
-> (Maybe Version -> HeadVersion)
-> ALens' Config (Maybe Version)
-> Maybe Version
-> g Config (Maybe Version)
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
C.optionalFieldDefAla FieldName
"cabal-install-version"     Maybe Version -> HeadVersion
HeadVersion                         (forall r a (f :: * -> *).
(HasField "cfgCabalInstallVersion" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgCabalInstallVersion") Maybe Version
defaultCabalInstallVersion
        g Config (Maybe Version)
-> (g Config (Maybe Version) -> g Config (Maybe Version))
-> g Config (Maybe Version)
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> g Config (Maybe Version) -> g Config (Maybe Version)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"VERSION" String
"cabal-install version for all jobs"
    g Config
  (Maybe Jobs
   -> Ubuntu
   -> TestedWithJobs
   -> CopyFields
   -> [String]
   -> Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Maybe Jobs)
-> g Config
     (Ubuntu
      -> TestedWithJobs
      -> CopyFields
      -> [String]
      -> Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config (Maybe Jobs) -> g Config (Maybe Jobs)
forall (c :: * -> Constraint) (g :: * -> * -> *) a s.
(FieldGrammar c g, c (Identity a)) =>
FieldName -> ALens' s (Maybe a) -> g s (Maybe a)
C.optionalField       FieldName
"jobs"                                                          (forall r a (f :: * -> *).
(HasField "cfgJobs" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgJobs")
        g Config (Maybe Jobs)
-> (g Config (Maybe Jobs) -> g Config (Maybe Jobs))
-> g Config (Maybe Jobs)
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config (Maybe Jobs) -> g Config (Maybe Jobs)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"JOBS" String
"jobs (N:M - cabal:ghc)"
    g Config
  (Ubuntu
   -> TestedWithJobs
   -> CopyFields
   -> [String]
   -> Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Ubuntu
-> g Config
     (TestedWithJobs
      -> CopyFields
      -> [String]
      -> Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Ubuntu -> Ubuntu -> g Config Ubuntu
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
C.optionalFieldDef    FieldName
"distribution"                                                  (forall r a (f :: * -> *).
(HasField "cfgUbuntu" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgUbuntu") Ubuntu
Xenial
        g Config Ubuntu
-> (g Config Ubuntu -> g Config Ubuntu) -> g Config Ubuntu
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config Ubuntu -> g Config Ubuntu
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"DIST" String
"distribution version (xenial, bionic)"
    g Config
  (TestedWithJobs
   -> CopyFields
   -> [String]
   -> Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config TestedWithJobs
-> g Config
     (CopyFields
      -> [String]
      -> Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config TestedWithJobs
-> TestedWithJobs
-> g Config TestedWithJobs
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
C.optionalFieldDef    FieldName
"jobs-selection"                                                (forall r a (f :: * -> *).
(HasField "cfgTestedWith" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgTestedWith") TestedWithJobs
TestedWithUniform
        g Config TestedWithJobs
-> (g Config TestedWithJobs -> g Config TestedWithJobs)
-> g Config TestedWithJobs
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> g Config TestedWithJobs -> g Config TestedWithJobs
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"uniform|any" String
"Jobs selection across packages"
    g Config
  (CopyFields
   -> [String]
   -> Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config CopyFields
-> g Config
     ([String]
      -> Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config CopyFields -> CopyFields -> g Config CopyFields
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
C.optionalFieldDef    FieldName
"copy-fields"                                                   (forall r a (f :: * -> *).
(HasField "cfgCopyFields" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgCopyFields") CopyFields
CopyFieldsSome
        g Config CopyFields
-> (g Config CopyFields -> g Config CopyFields)
-> g Config CopyFields
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config CopyFields -> g Config CopyFields
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"none|some|all" String
"Copy ? fields from cabal.project fields"
    g Config
  ([String]
   -> Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [String]
-> g Config
     (Bool
      -> Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' Config [String]
-> g Config [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
C.monoidalFieldAla    FieldName
"local-ghc-options"         (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
C.alaList' NoCommaFSep
C.NoCommaFSep String -> Token'
C.Token') (forall r a (f :: * -> *).
(HasField "cfgLocalGhcOptions" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgLocalGhcOptions")
        g Config [String]
-> (g Config [String] -> g Config [String]) -> g Config [String]
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config [String] -> g Config [String]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"OPTS" String
"--ghc-options for local packages"
    g Config
  (Bool
   -> Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"submodules"                                                    (forall r a (f :: * -> *).
(HasField "cfgSubmodules" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgSubmodules") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Clone submodules, i.e. recursively"
    g Config
  (Bool
   -> Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> [Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"cache"                                                         (forall r a (f :: * -> *).
(HasField "cfgCache" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgCache") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Disable caching"
    g Config
  (Bool
   -> [Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     ([Installed]
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"install-dependencies"                                          (forall r a (f :: * -> *).
(HasField "cfgInstallDeps" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgInstallDeps") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Skip separate dependency installation step"
    g Config
  ([Installed]
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [Installed]
-> g Config
     (VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([Installed] -> List FSep (Identity Installed) Installed)
-> ALens' Config [Installed]
-> g Config [Installed]
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
C.monoidalFieldAla    FieldName
"installed"                 (FSep -> [Installed] -> List FSep (Identity Installed) Installed
forall sep a. sep -> [a] -> List sep (Identity a) a
C.alaList FSep
C.FSep)                  (forall r a (f :: * -> *).
(HasField "cfgInstalled" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgInstalled")
        g Config [Installed]
-> (g Config [Installed] -> g Config [Installed])
-> g Config [Installed]
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config [Installed] -> g Config [Installed]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"+/-PKG" String
"Specify 'constraint: ... installed' packages"
    g Config
  (VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField            FieldName
"tests"                                                         (forall r a (f :: * -> *).
(HasField "cfgTests" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgTests") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Build tests with"
    g Config
  (VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField            FieldName
"run-tests"                                                     (forall r a (f :: * -> *).
(HasField "cfgRunTests" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgRunTests") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Run tests with (note: only built tests are run)"
    g Config
  (VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField           FieldName
"benchmarks"                                                     (forall r a (f :: * -> *).
(HasField "cfgBenchmarks" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgBenchmarks") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Build benchmarks"
    g Config
  (VersionRange
   -> VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField           FieldName
"haddock"                                                        (forall r a (f :: * -> *).
(HasField "cfgHaddock" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgHaddock") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Haddock step"
    g Config
  (VersionRange
   -> VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField           FieldName
"no-tests-no-benchmarks"                                         (forall r a (f :: * -> *).
(HasField "cfgNoTestsNoBench" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgNoTestsNoBench") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Build without tests and benchmarks"
    g Config
  (VersionRange
   -> VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (VersionRange
      -> Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField            FieldName
"unconstrained"                                                 (forall r a (f :: * -> *).
(HasField "cfgUnconstrainted" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgUnconstrainted") VersionRange
anyVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Make unconstrained build"
    g Config
  (VersionRange
   -> Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (Bool
      -> [PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s.
OptionsGrammar c p =>
FieldName
-> ALens' s VersionRange -> VersionRange -> p s VersionRange
rangeField            FieldName
"head-hackage"                                                  (forall r a (f :: * -> *).
(HasField "cfgHeadHackage" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgHeadHackage") VersionRange
defaultHeadHackage
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"RANGE" String
"Use head.hackage repository. Also marks as allow-failures"
    g Config
  (Bool
   -> [PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     ([PackageName]
      -> Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"ghcjs-tests"                                                   (forall r a (f :: * -> *).
(HasField "cfgGhcjsTests" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGhcjsTests") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Run tests with GHCJS (experimental, relies on cabal-plan finding test-suites)"
    g Config
  ([PackageName]
   -> Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [PackageName]
-> g Config
     (Bool
      -> Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([PackageName] -> List FSep (Identity PackageName) PackageName)
-> ALens' Config [PackageName]
-> g Config [PackageName]
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
C.monoidalFieldAla    FieldName
"ghcjs-tools"               (FSep
-> [PackageName] -> List FSep (Identity PackageName) PackageName
forall sep a. sep -> [a] -> List sep (Identity a) a
C.alaList FSep
C.FSep)                  (forall r a (f :: * -> *).
(HasField "cfgGhcjsTools" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGhcjsTools")
--        ^^^ metahelp "TOOL" "Additional host tools to install with GHCJS"
    g Config
  (Bool
   -> Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> [String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef FieldName
"test-output-direct"                                                (forall r a (f :: * -> *).
(HasField "cfgTestOutputDirect" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgTestOutputDirect") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Use --test-show-details=direct, may cause problems with build-type: Custom"
    g Config
  (Bool
   -> [String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     ([String]
      -> [String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef FieldName
"cabal-check"                                                       (forall r a (f :: * -> *).
(HasField "cfgCheck" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgCheck") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Disable cabal check run"
    g Config
  ([String]
   -> [String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [String]
-> g Config
     ([String]
      -> Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep Token' String)
-> ALens' Config [String]
-> g Config [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
C.monoidalFieldAla    FieldName
"branches"                  (FSep -> (String -> Token') -> [String] -> List FSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
C.alaList' FSep
C.FSep String -> Token'
C.Token')        (forall r a (f :: * -> *).
(HasField "cfgOnlyBranches" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgOnlyBranches")
        g Config [String]
-> (g Config [String] -> g Config [String]) -> g Config [String]
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config [String] -> g Config [String]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"BRANCH" String
"Enable builds only for specific branches"
    g Config
  ([String]
   -> Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [String]
-> g Config
     (Bool
      -> Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List FSep Token' String)
-> ALens' Config [String]
-> g Config [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
C.monoidalFieldAla    FieldName
"irc-channels"              (FSep -> (String -> Token') -> [String] -> List FSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
C.alaList' FSep
C.FSep String -> Token'
C.Token')        (forall r a (f :: * -> *).
(HasField "cfgIrcChannels" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgIrcChannels")
        g Config [String]
-> (g Config [String] -> g Config [String]) -> g Config [String]
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config [String] -> g Config [String]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"IRC" String
"Enable IRC notifications to given channel (e.g. 'irc.freenode.org#haskell-lens')"
    g Config
  (Bool
   -> Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"irc-if-in-origin-repo"                                         (forall r a (f :: * -> *).
(HasField "cfgIrcIfInOriginRepo" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgIrcIfInOriginRepo") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Only send IRC notifications if run from the original remote (GitHub Actions only)"
    g Config
  (Bool
   -> Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Maybe String
      -> Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef FieldName
"email-notifications"                                               (forall r a (f :: * -> *).
(HasField "cfgEmailNotifications" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgEmailNotifications") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Disable email notifications"
    g Config
  (Maybe String
   -> Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Maybe String)
-> g Config
     (Set Fold
      -> Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (String -> Token')
-> ALens' Config (Maybe String)
-> g Config (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)
C.optionalFieldAla    FieldName
"project-name"              String -> Token'
C.Token'                            (forall r a (f :: * -> *).
(HasField "cfgProjectName" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgProjectName")
        g Config (Maybe String)
-> (g Config (Maybe String) -> g Config (Maybe String))
-> g Config (Maybe String)
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> g Config (Maybe String) -> g Config (Maybe String)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"NAME" String
"Project name (used for IRC notifications), defaults to package name or name of first package listed in cabal.project file"
    g Config
  (Set Fold
   -> Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Set Fold)
-> g Config
     (Bool
      -> Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Set Fold -> Folds)
-> ALens' Config (Set Fold)
-> g Config (Set Fold)
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
C.monoidalFieldAla    FieldName
"folds"                     Set Fold -> Folds
Folds                               (forall r a (f :: * -> *).
(HasField "cfgFolds" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgFolds")
        g Config (Set Fold)
-> (g Config (Set Fold) -> g Config (Set Fold))
-> g Config (Set Fold)
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config (Set Fold) -> g Config (Set Fold)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"FOLD" String
"Build steps to fold"
    g Config
  (Bool
   -> Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"ghc-head"                                                      (forall r a (f :: * -> *).
(HasField "cfgGhcHead" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGhcHead") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Add ghc-head job"
    g Config
  (Bool
   -> Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Bool
      -> Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"postgresql"                                                    (forall r a (f :: * -> *).
(HasField "cfgPostgres" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgPostgres") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Add postgresql service"
    g Config
  (Bool
   -> Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Map Version String
      -> VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"google-chrome"                                                 (forall r a (f :: * -> *).
(HasField "cfgGoogleChrome" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGoogleChrome") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Add google-chrome service"
    g Config
  (Map Version String
   -> VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Map Version String)
-> g Config
     (VersionRange
      -> Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Map Version String -> Env)
-> ALens' Config (Map Version String)
-> g Config (Map Version 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
C.monoidalFieldAla    FieldName
"env"                       Map Version String -> Env
Env                                 (forall r a (f :: * -> *).
(HasField "cfgEnv" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgEnv")
        g Config (Map Version String)
-> (g Config (Map Version String) -> g Config (Map Version String))
-> g Config (Map Version String)
forall a b. a -> (a -> b) -> b
^^^ String
-> String
-> g Config (Map Version String)
-> g Config (Map Version String)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"ENV" String
"Environment variables per job (e.g. `8.0.2:HADDOCK=false`)"
    g Config
  (VersionRange
   -> Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config VersionRange
-> g Config
     (Bool
      -> Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (VersionRange -> Range)
-> ALens' Config VersionRange
-> VersionRange
-> g Config VersionRange
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
C.optionalFieldDefAla FieldName
"allow-failures"            VersionRange -> Range
Range                               (forall r a (f :: * -> *).
(HasField "cfgAllowFailures" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgAllowFailures") VersionRange
noVersion
        g Config VersionRange
-> (g Config VersionRange -> g Config VersionRange)
-> g Config VersionRange
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config VersionRange -> g Config VersionRange
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"JOB" String
"Allow failures of particular GHC version"
    g Config
  (Bool
   -> Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (Set Version
      -> Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef     FieldName
"last-in-series"                                                (forall r a (f :: * -> *).
(HasField "cfgLastInSeries" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgLastInSeries") Bool
False
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"[Discouraged] Assume there are only GHCs last in major series: 8.2.* will match only 8.2.2"
    g Config
  (Set Version
   -> Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Set Version)
-> g Config
     (Set String
      -> [String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Set Version -> AlaSet NoCommaFSep (Identity Version) Version)
-> ALens' Config (Set Version)
-> g Config (Set Version)
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
C.monoidalFieldAla    FieldName
"osx"                       (NoCommaFSep
-> Set Version -> AlaSet NoCommaFSep (Identity Version) Version
forall sep a. sep -> Set a -> AlaSet sep (Identity a) a
alaSet NoCommaFSep
C.NoCommaFSep)              (forall r a (f :: * -> *).
(HasField "cfgOsx" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgOsx")
        g Config (Set Version)
-> (g Config (Set Version) -> g Config (Set Version))
-> g Config (Set Version)
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> g Config (Set Version) -> g Config (Set Version)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"JOB" String
"Jobs to additionally build with OSX"
    g Config
  (Set String
   -> [String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config (Set String)
-> g Config
     ([String]
      -> [String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> (Set String -> AlaSet NoCommaFSep Token' String)
-> ALens' Config (Set String)
-> g Config (Set 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
C.monoidalFieldAla    FieldName
"apt"                       (NoCommaFSep
-> (String -> Token')
-> Set String
-> AlaSet NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> Set a -> AlaSet sep b a
alaSet' NoCommaFSep
C.NoCommaFSep String -> Token'
C.Token')    (forall r a (f :: * -> *).
(HasField "cfgApt" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgApt")
        g Config (Set String)
-> (g Config (Set String) -> g Config (Set String))
-> g Config (Set String)
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config (Set String) -> g Config (Set String)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"PKG" String
"Additional apt packages to install"
    g Config
  ([String]
   -> [String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [String]
-> g Config
     ([String]
      -> Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' Config [String]
-> g Config [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
C.monoidalFieldAla    FieldName
"travis-patches"            (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
C.alaList' NoCommaFSep
C.NoCommaFSep String -> Token'
C.Token') (forall r a (f :: * -> *).
(HasField "cfgTravisPatches" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgTravisPatches")
        g Config [String]
-> (g Config [String] -> g Config [String]) -> g Config [String]
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> String -> g Config [String] -> g Config [String]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> String -> p s a -> p s a
metaActionHelp String
"PATCH" String
"file" String
".patch files to apply to the generated Travis YAML file"
    g Config
  ([String]
   -> Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config [String]
-> g Config
     (Bool
      -> PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ([String] -> List NoCommaFSep Token' String)
-> ALens' Config [String]
-> g Config [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
C.monoidalFieldAla    FieldName
"github-patches"            (NoCommaFSep
-> (String -> Token') -> [String] -> List NoCommaFSep Token' String
forall sep a b. sep -> (a -> b) -> [a] -> List sep b a
C.alaList' NoCommaFSep
C.NoCommaFSep String -> Token'
C.Token') (forall r a (f :: * -> *).
(HasField "cfgGitHubPatches" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGitHubPatches")
        g Config [String]
-> (g Config [String] -> g Config [String]) -> g Config [String]
forall a b. a -> (a -> b) -> b
^^^ String
-> String -> String -> g Config [String] -> g Config [String]
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> String -> p s a -> p s a
metaActionHelp String
"PATCH" String
"file" String
".patch files to apply to the generated GitHub Actions YAML file"
    g Config
  (Bool
   -> PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config Bool
-> g Config
     (PackageScope
      -> DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config Bool -> Bool -> g Config Bool
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s Bool -> Bool -> g s Bool
C.booleanFieldDef FieldName
"insert-version"                                                    (forall r a (f :: * -> *).
(HasField "cfgInsertVersion" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgInsertVersion") Bool
True
        g Config Bool -> (g Config Bool -> g Config Bool) -> g Config Bool
forall a b. a -> (a -> b) -> b
^^^ String -> g Config Bool -> g Config Bool
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Don't insert the haskell-ci version into the generated Travis YAML file"
    g Config
  (PackageScope
   -> DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config PackageScope
-> g Config
     (DoctestConfig
      -> DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config PackageScope
-> PackageScope
-> g Config PackageScope
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
C.optionalFieldDef FieldName
"error-missing-methods"                                            (forall r a (f :: * -> *).
(HasField "cfgErrorMissingMethods" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgErrorMissingMethods") PackageScope
PackageScopeLocal
        g Config PackageScope
-> (g Config PackageScope -> g Config PackageScope)
-> g Config PackageScope
forall a b. a -> (a -> b) -> b
^^^ String -> String -> g Config PackageScope -> g Config PackageScope
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> String -> p s a -> p s a
metahelp String
"PKGSCOPE" String
"Insert -Werror=missing-methods for package scope (none, local, all)"
    g Config
  (DoctestConfig
   -> DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config DoctestConfig
-> g Config
     (DocspecConfig
      -> HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' Config DoctestConfig
-> g DoctestConfig DoctestConfig -> g Config DoctestConfig
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
C.blurFieldGrammar (forall r a (f :: * -> *).
(HasField "cfgDoctest" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgDoctest") g DoctestConfig DoctestConfig
forall (c :: * -> Constraint) (g :: * -> * -> *).
(OptionsGrammar c g, Applicative (g DoctestConfig)) =>
g DoctestConfig DoctestConfig
doctestConfigGrammar
    g Config
  (DocspecConfig
   -> HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config DocspecConfig
-> g Config
     (HLintConfig
      -> [ConstraintSet]
      -> [PrettyField ()]
      -> String
      -> Maybe String
      -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' Config DocspecConfig
-> g DocspecConfig DocspecConfig -> g Config DocspecConfig
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
C.blurFieldGrammar (forall r a (f :: * -> *).
(HasField "cfgDocspec" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgDocspec") g DocspecConfig DocspecConfig
forall (c :: * -> Constraint) (g :: * -> * -> *).
(OptionsGrammar c g, Applicative (g DocspecConfig)) =>
g DocspecConfig DocspecConfig
docspecConfigGrammar
    g Config
  (HLintConfig
   -> [ConstraintSet]
   -> [PrettyField ()]
   -> String
   -> Maybe String
   -> Config)
-> g Config HLintConfig
-> g Config
     ([ConstraintSet]
      -> [PrettyField ()] -> String -> Maybe String -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ALens' Config HLintConfig
-> g HLintConfig HLintConfig -> g Config HLintConfig
forall (c :: * -> Constraint) (g :: * -> * -> *) a b d.
FieldGrammar c g =>
ALens' a b -> g b d -> g a d
C.blurFieldGrammar (forall r a (f :: * -> *).
(HasField "cfgHLint" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgHLint")   g HLintConfig HLintConfig
forall (c :: * -> Constraint) (g :: * -> * -> *).
(OptionsGrammar c g, Applicative (g HLintConfig),
 c (Identity HLintJob)) =>
g HLintConfig HLintConfig
hlintConfigGrammar
    g Config
  ([ConstraintSet]
   -> [PrettyField ()] -> String -> Maybe String -> Config)
-> g Config [ConstraintSet]
-> g Config ([PrettyField ()] -> String -> Maybe String -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [ConstraintSet] -> g Config [ConstraintSet]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [] -- constraint sets
    g Config ([PrettyField ()] -> String -> Maybe String -> Config)
-> g Config [PrettyField ()]
-> g Config (String -> Maybe String -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [PrettyField ()] -> g Config [PrettyField ()]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [] -- raw project fields
    g Config (String -> Maybe String -> Config)
-> g Config String -> g Config (Maybe String -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName -> ALens' Config String -> g Config String
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s String -> g s String
C.freeTextFieldDef FieldName
"raw-travis"                                                       (forall r a (f :: * -> *).
(HasField "cfgRawTravis" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgRawTravis")
        g Config String
-> (g Config String -> g Config String) -> g Config String
forall a b. a -> (a -> b) -> b
^^^ String -> g Config String -> g Config String
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"Raw travis commands which will be run at the very end of the script"
    g Config (Maybe String -> Config)
-> g Config (Maybe String) -> g Config Config
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> FieldName
-> ALens' Config (Maybe String) -> g Config (Maybe String)
forall (c :: * -> Constraint) (g :: * -> * -> *) s.
FieldGrammar c g =>
FieldName -> ALens' s (Maybe String) -> g s (Maybe String)
C.freeTextField FieldName
"github-action-name"                                                  (forall r a (f :: * -> *).
(HasField "cfgGitHubActionName" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgGitHubActionName")
        g Config (Maybe String)
-> (g Config (Maybe String) -> g Config (Maybe String))
-> g Config (Maybe String)
forall a b. a -> (a -> b) -> b
^^^ String -> g Config (Maybe String) -> g Config (Maybe String)
forall (c :: * -> Constraint) (p :: * -> * -> *) s a.
OptionsGrammar c p =>
String -> p s a -> p s a
help String
"The name of GitHub Action"

-------------------------------------------------------------------------------
-- Reading
-------------------------------------------------------------------------------

readConfigFile :: MonadIO m => FilePath -> m Config
readConfigFile :: String -> m Config
readConfigFile = IO Config -> m Config
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Config -> m Config)
-> (String -> IO Config) -> String -> m Config
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Field Position] -> ParseResult Config) -> String -> IO Config
forall a. ([Field Position] -> ParseResult a) -> String -> IO a
readAndParseFile [Field Position] -> ParseResult Config
parseConfigFile

parseConfigFile :: [C.Field C.Position] -> C.ParseResult Config
parseConfigFile :: [Field Position] -> ParseResult Config
parseConfigFile [Field Position]
fields0 = do
    Config
config <- CabalSpecVersion
-> Fields Position
-> ParsecFieldGrammar Config Config
-> ParseResult Config
forall s a.
CabalSpecVersion
-> Fields Position -> ParsecFieldGrammar s a -> ParseResult a
C.parseFieldGrammar CabalSpecVersion
C.cabalSpecLatest Fields Position
fields ParsecFieldGrammar Config Config
forall (c :: * -> Constraint) (g :: * -> * -> *).
(OptionsGrammar c g, Applicative (g Config), c (Identity HLintJob),
 c (Identity PackageScope), c (Identity TestedWithJobs),
 c (Identity Ubuntu), c (Identity Jobs), c (Identity CopyFields),
 c Env, c Folds, c CopyFields, c HeadVersion,
 c (List FSep (Identity Installed) Installed),
 Applicative (g DoctestConfig), Applicative (g DocspecConfig),
 Applicative (g HLintConfig)) =>
g Config Config
configGrammar
    [Config -> Config]
config' <- (Section Position -> ParseResult (Config -> Config))
-> [Section Position] -> ParseResult [Config -> Config]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Section Position -> ParseResult (Config -> Config)
parseSection ([Section Position] -> ParseResult [Config -> Config])
-> [Section Position] -> ParseResult [Config -> Config]
forall a b. (a -> b) -> a -> b
$ [[Section Position]] -> [Section Position]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[Section Position]]
sections
    Config -> ParseResult Config
forall (m :: * -> *) a. Monad m => a -> m a
return ((Config -> (Config -> Config) -> Config)
-> Config -> [Config -> Config] -> Config
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' Config -> (Config -> Config) -> Config
forall a b. a -> (a -> b) -> b
(&) Config
config [Config -> Config]
config')
  where
    (Fields Position
fields, [[Section Position]]
sections) = [Field Position] -> (Fields Position, [[Section Position]])
forall ann. [Field ann] -> (Fields ann, [[Section ann]])
C.partitionFields [Field Position]
fields0

    parseSection :: C.Section C.Position -> C.ParseResult (Config -> Config)
    parseSection :: Section Position -> ParseResult (Config -> Config)
parseSection (C.MkSection (C.Name Position
pos FieldName
name) [SectionArg Position]
args [Field Position]
cfields)
        | FieldName
name FieldName -> FieldName -> Bool
forall a. Eq a => a -> a -> Bool
== FieldName
"constraint-set" = do
            String
name' <- Position -> [SectionArg Position] -> ParseResult String
parseName Position
pos [SectionArg Position]
args
            let (Fields Position
fs, [[Section Position]]
_sections) = [Field Position] -> (Fields Position, [[Section Position]])
forall ann. [Field ann] -> (Fields ann, [[Section ann]])
C.partitionFields [Field Position]
cfields
            ConstraintSet
cs <- CabalSpecVersion
-> Fields Position
-> ParsecFieldGrammar ConstraintSet ConstraintSet
-> ParseResult ConstraintSet
forall s a.
CabalSpecVersion
-> Fields Position -> ParsecFieldGrammar s a -> ParseResult a
C.parseFieldGrammar CabalSpecVersion
C.cabalSpecLatest Fields Position
fs (String -> ParsecFieldGrammar ConstraintSet ConstraintSet
forall (c :: * -> Constraint) (g :: * -> * -> *).
(OptionsGrammar c g, Applicative (g ConstraintSet)) =>
String -> g ConstraintSet ConstraintSet
constraintSetGrammar String
name')
            (Config -> Config) -> ParseResult (Config -> Config)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Config -> Config) -> ParseResult (Config -> Config))
-> (Config -> Config) -> ParseResult (Config -> Config)
forall a b. (a -> b) -> a -> b
$ ASetter Config Config [ConstraintSet] [ConstraintSet]
-> ([ConstraintSet] -> [ConstraintSet]) -> Config -> Config
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over (forall r a (f :: * -> *).
(HasField "cfgConstraintSets" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgConstraintSets") (ConstraintSet
cs ConstraintSet -> [ConstraintSet] -> [ConstraintSet]
forall a. a -> [a] -> [a]
:)
        | FieldName
name FieldName -> FieldName -> Bool
forall a. Eq a => a -> a -> Bool
== FieldName
"raw-project" = do
            let fs :: [PrettyField Position]
fs = [Field Position] -> [PrettyField Position]
forall ann. [Field ann] -> [PrettyField ann]
C.fromParsecFields [Field Position]
cfields
            (Config -> Config) -> ParseResult (Config -> Config)
forall (m :: * -> *) a. Monad m => a -> m a
return ((Config -> Config) -> ParseResult (Config -> Config))
-> (Config -> Config) -> ParseResult (Config -> Config)
forall a b. (a -> b) -> a -> b
$ ASetter Config Config [PrettyField ()] [PrettyField ()]
-> ([PrettyField ()] -> [PrettyField ()]) -> Config -> Config
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
over (forall r a (f :: * -> *).
(HasField "cfgRawProject" r a, Functor f) =>
(a -> f a) -> r -> f r
forall (name :: Symbol) r a (f :: * -> *).
(HasField name r a, Functor f) =>
(a -> f a) -> r -> f r
field @"cfgRawProject") ([PrettyField ()] -> [PrettyField ()] -> [PrettyField ()]
forall a. [a] -> [a] -> [a]
++ (PrettyField Position -> PrettyField ())
-> [PrettyField Position] -> [PrettyField ()]
forall a b. (a -> b) -> [a] -> [b]
map PrettyField Position -> PrettyField ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void [PrettyField Position]
fs)
        | Bool
otherwise = do
            Position -> PWarnType -> String -> ParseResult ()
C.parseWarning Position
pos PWarnType
C.PWTUnknownSection (String -> ParseResult ()) -> String -> ParseResult ()
forall a b. (a -> b) -> a -> b
$ String
"Unknown section " String -> String -> String
forall a. [a] -> [a] -> [a]
++ FieldName -> String
fromUTF8BS FieldName
name
            (Config -> Config) -> ParseResult (Config -> Config)
forall (m :: * -> *) a. Monad m => a -> m a
return Config -> Config
forall a. a -> a
id

-------------------------------------------------------------------------------
-- Env
-------------------------------------------------------------------------------

newtype Env = Env (M.Map Version String)
  deriving anyclass (C.Newtype (M.Map Version String))

instance C.Parsec Env where
    parsec :: m Env
parsec = Map Version String -> Env
Env (Map Version String -> Env)
-> ([(Version, String)] -> Map Version String)
-> [(Version, String)]
-> Env
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Version, String)] -> Map Version String
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(Version, String)] -> Env) -> m [(Version, String)] -> m Env
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> m (Version, String) -> m [(Version, String)]
forall (m :: * -> *) a. CabalParsing m => m a -> m [a]
C.parsecLeadingCommaList m (Version, String)
p where
        p :: m (Version, String)
p = do
            Version
v <- m Version
forall a (m :: * -> *). (Parsec a, CabalParsing m) => m a
C.parsec
            Char
_ <- Char -> m Char
forall (m :: * -> *). CharParsing m => Char -> m Char
C.char Char
':'
            String
s <- (Char -> Bool) -> m String
forall (m :: * -> *). CharParsing m => (Char -> Bool) -> m String
C.munch1 ((Char -> Bool) -> m String) -> (Char -> Bool) -> m String
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
/= Char
','
            (Version, String) -> m (Version, String)
forall (m :: * -> *) a. Monad m => a -> m a
return (Version
v, String
s)

instance C.Pretty Env where
    pretty :: Env -> Doc
pretty (Env Map Version String
m) = [Doc] -> Doc
PP.fsep ([Doc] -> Doc)
-> (Map Version String -> [Doc]) -> Map Version String -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> [Doc] -> [Doc]
PP.punctuate Doc
PP.comma ([Doc] -> [Doc])
-> (Map Version String -> [Doc]) -> Map Version String -> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Version, String) -> Doc) -> [(Version, String)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (Version, String) -> Doc
forall a. Pretty a => (a, String) -> Doc
p ([(Version, String)] -> [Doc])
-> (Map Version String -> [(Version, String)])
-> Map Version String
-> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map Version String -> [(Version, String)]
forall k a. Map k a -> [(k, a)]
M.toList (Map Version String -> Doc) -> Map Version String -> Doc
forall a b. (a -> b) -> a -> b
$ Map Version String
m where
        p :: (a, String) -> Doc
p (a
v, String
s) = a -> Doc
forall a. Pretty a => a -> Doc
C.pretty a
v Doc -> Doc -> Doc
PP.<> Doc
PP.colon Doc -> Doc -> Doc
PP.<> String -> Doc
PP.text String
s

-------------------------------------------------------------------------------
-- From Cabal
-------------------------------------------------------------------------------

parseName :: C.Position -> [C.SectionArg C.Position] -> C.ParseResult String
parseName :: Position -> [SectionArg Position] -> ParseResult String
parseName Position
pos [SectionArg Position]
args = FieldName -> String
fromUTF8BS (FieldName -> String)
-> ParseResult FieldName -> ParseResult String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Position -> [SectionArg Position] -> ParseResult FieldName
parseNameBS Position
pos [SectionArg Position]
args

parseNameBS :: C.Position -> [C.SectionArg C.Position] -> C.ParseResult BS.ByteString
parseNameBS :: Position -> [SectionArg Position] -> ParseResult FieldName
parseNameBS Position
pos [SectionArg Position]
args = case [SectionArg Position]
args of
    [C.SecArgName Position
_pos FieldName
secName] ->
         FieldName -> ParseResult FieldName
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldName
secName
    [C.SecArgStr Position
_pos FieldName
secName] ->
         FieldName -> ParseResult FieldName
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldName
secName
    [] -> do
         Position -> String -> ParseResult ()
C.parseFailure Position
pos String
"name required"
         FieldName -> ParseResult FieldName
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldName
""
    [SectionArg Position]
_ -> do
         -- TODO: pretty print args
         Position -> String -> ParseResult ()
C.parseFailure Position
pos (String -> ParseResult ()) -> String -> ParseResult ()
forall a b. (a -> b) -> a -> b
$ String
"Invalid name " String -> String -> String
forall a. [a] -> [a] -> [a]
++ [SectionArg Position] -> String
forall a. Show a => a -> String
show [SectionArg Position]
args
         FieldName -> ParseResult FieldName
forall (f :: * -> *) a. Applicative f => a -> f a
pure FieldName
""