{-# LANGUAGE NoImplicitPrelude     #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NoFieldSelectors      #-}
{-# LANGUAGE OverloadedRecordDot   #-}
{-# LANGUAGE OverloadedStrings     #-}

module Stack.Types.ConfigMonoid
  ( ConfigMonoid (..)
  , parseConfigMonoid
  , parseConfigMonoidObject
  , configMonoidAllowDifferentUserName
  , configMonoidGHCVariantName
  , configMonoidInstallGHCName
  , configMonoidSystemGHCName
  ) where

import           Data.Aeson.Types ( Object, Value )
import           Data.Aeson.WarningParser
                   ( WarningParser, WithJSONWarnings, (..:?), (..!=)
                   , jsonSubWarnings, jsonSubWarningsT, jsonSubWarningsTT
                   , withObjectWarnings
                   )
import           Casa.Client ( CasaRepoPrefix )
import           Control.Monad.Writer ( tell )
import           Data.Coerce ( coerce )
import qualified Data.Map as Map
import qualified Data.Map.Strict as M
import qualified Data.Monoid as Monoid
import           Data.Monoid.Map ( MonoidMap (..) )
import qualified Data.Yaml as Yaml
import           Distribution.Version ( anyVersion )
import           Generics.Deriving.Monoid ( mappenddefault, memptydefault )
import           Stack.Prelude hiding ( snapshotLocation )
import           Stack.Types.AllowNewerDeps ( AllowNewerDeps )
import           Stack.Types.ApplyGhcOptions ( ApplyGhcOptions (..) )
import           Stack.Types.ApplyProgOptions ( ApplyProgOptions (..) )
import           Stack.Types.BuildOptsMonoid ( BuildOptsMonoid )
import           Stack.Types.Casa ( CasaOptsMonoid )
import           Stack.Types.CabalConfigKey ( CabalConfigKey )
import           Stack.Types.ColorWhen ( ColorWhen )
import           Stack.Types.Compiler ( CompilerRepository )
import           Stack.Types.CompilerBuild ( CompilerBuild )
import           Stack.Types.Docker ( DockerOptsMonoid, VersionRangeJSON (..) )
import           Stack.Types.DumpLogs ( DumpLogs )
import           Stack.Types.GhcOptionKey ( GhcOptionKey (..) )
import           Stack.Types.GhcOptions ( GhcOptions (..) )
import           Stack.Types.GHCVariant ( GHCVariant )
import           Stack.Types.Nix ( NixOptsMonoid )
import           Stack.Types.PvpBounds ( PvpBounds )
import           Stack.Types.SCM ( SCM )
import           Stack.Types.SetupInfo ( SetupInfo )
import           Stack.Types.TemplateName ( TemplateName )
import           Stack.Types.Version
                   ( IntersectingVersionRange (..), VersionCheck )
import qualified System.FilePath as FilePath

-- | An uninterpreted representation of configuration options.

-- Configurations may be "cascaded" using mappend (left-biased).

data ConfigMonoid = ConfigMonoid
  { ConfigMonoid -> First (Path Abs Dir)
stackRoot          :: !(First (Path Abs Dir))
    -- ^ See: 'clStackRoot'

  , ConfigMonoid -> First (Path Rel Dir)
workDir            :: !(First (Path Rel Dir))
    -- ^ See: 'configWorkDir'.

  , ConfigMonoid -> BuildOptsMonoid
buildOpts          :: !BuildOptsMonoid
    -- ^ build options.

  , ConfigMonoid -> DockerOptsMonoid
dockerOpts         :: !DockerOptsMonoid
    -- ^ Docker options.

  , ConfigMonoid -> NixOptsMonoid
nixOpts            :: !NixOptsMonoid
    -- ^ Options for the execution environment (nix-shell or container)

  , ConfigMonoid -> First Int
connectionCount    :: !(First Int)
    -- ^ See: 'configConnectionCount'

  , ConfigMonoid -> FirstTrue
hideTHLoading      :: !FirstTrue
    -- ^ See: 'configHideTHLoading'

  , ConfigMonoid -> First Bool
prefixTimestamps   :: !(First Bool)
    -- ^ See: 'configPrefixTimestamps'

  , ConfigMonoid -> First Text
latestSnapshot     :: !(First Text)
    -- ^ See: 'configLatestSnapshot'

  , ConfigMonoid -> First PackageIndexConfig
packageIndex     :: !(First PackageIndexConfig)
    -- ^ See: 'withPantryConfig'

  , ConfigMonoid -> First [PackageIndexConfig]
packageIndices     :: !(First [PackageIndexConfig])
    -- ^ Deprecated in favour of package-index

  , ConfigMonoid -> First Bool
systemGHC          :: !(First Bool)
    -- ^ See: 'configSystemGHC'

  , ConfigMonoid -> FirstTrue
installGHC          :: !FirstTrue
    -- ^ See: 'configInstallGHC'

  , ConfigMonoid -> FirstFalse
skipGHCCheck        :: !FirstFalse
    -- ^ See: 'configSkipGHCCheck'

  , ConfigMonoid -> FirstFalse
skipMsys            :: !FirstFalse
    -- ^ See: 'configSkipMsys'

  , ConfigMonoid -> First VersionCheck
compilerCheck       :: !(First VersionCheck)
    -- ^ See: 'configCompilerCheck'

  , ConfigMonoid -> First CompilerRepository
compilerRepository  :: !(First CompilerRepository)
    -- ^ See: 'configCompilerRepository'

  , ConfigMonoid -> IntersectingVersionRange
requireStackVersion :: !IntersectingVersionRange
    -- ^ See: 'configRequireStackVersion'

  , ConfigMonoid -> First String
arch                :: !(First String)
    -- ^ Used for overriding the platform

  , ConfigMonoid -> First GHCVariant
ghcVariant          :: !(First GHCVariant)
    -- ^ Used for overriding the platform

  , ConfigMonoid -> First CompilerBuild
ghcBuild            :: !(First CompilerBuild)
    -- ^ Used for overriding the GHC build

  , ConfigMonoid -> First Int
jobs                :: !(First Int)
    -- ^ See: 'configJobs'

  , ConfigMonoid -> [String]
extraIncludeDirs    :: ![FilePath]
    -- ^ See: 'configExtraIncludeDirs'

  , ConfigMonoid -> [String]
extraLibDirs        :: ![FilePath]
    -- ^ See: 'configExtraLibDirs'

  , ConfigMonoid -> [Text]
customPreprocessorExts :: ![Text]
    -- ^ See: 'configCustomPreprocessorExts'

  , ConfigMonoid -> First (Path Abs File)
overrideGccPath    :: !(First (Path Abs File))
    -- ^ Allow users to override the path to gcc

  , ConfigMonoid -> First String
overrideHpack       :: !(First FilePath)
    -- ^ Use Hpack executable (overrides bundled Hpack)

  , ConfigMonoid -> First Bool
concurrentTests     :: !(First Bool)
    -- ^ See: 'configConcurrentTests'

  , ConfigMonoid -> First String
localBinPath        :: !(First FilePath)
    -- ^ Used to override the binary installation dir

  , ConfigMonoid -> Map Text Text
templateParameters  :: !(Map Text Text)
    -- ^ Template parameters.

  , ConfigMonoid -> First SCM
scmInit             :: !(First SCM)
    -- ^ Initialize SCM (e.g. git init) when making new projects?

  , ConfigMonoid -> MonoidMap PackageName (Dual [Text])
ghcOptionsByName    :: !(MonoidMap PackageName (Monoid.Dual [Text]))
    -- ^ See 'configGhcOptionsByName'. Uses 'Monoid.Dual' so that

    -- options from the configs on the right come first, so that they

    -- can be overridden.

  , ConfigMonoid -> MonoidMap ApplyGhcOptions (Dual [Text])
ghcOptionsByCat     :: !(MonoidMap ApplyGhcOptions (Monoid.Dual [Text]))
    -- ^ See 'configGhcOptionsAll'. Uses 'Monoid.Dual' so that options

    -- from the configs on the right come first, so that they can be

    -- overridden.

  , ConfigMonoid -> MonoidMap CabalConfigKey (Dual [Text])
cabalConfigOpts     :: !(MonoidMap CabalConfigKey (Monoid.Dual [Text]))
    -- ^ See 'configCabalConfigOpts'.

  , ConfigMonoid -> [Path Abs Dir]
extraPath           :: ![Path Abs Dir]
    -- ^ Additional paths to search for executables in

  , ConfigMonoid -> [String]
setupInfoLocations  :: ![String]
    -- ^ See 'configSetupInfoLocations'

  , ConfigMonoid -> SetupInfo
setupInfoInline     :: !SetupInfo
    -- ^ See 'configSetupInfoInline'

  , ConfigMonoid -> First (Path Abs Dir)
localProgramsBase   :: !(First (Path Abs Dir))
    -- ^ Override the default local programs dir, where e.g. GHC is installed.

  , ConfigMonoid -> First PvpBounds
pvpBounds           :: !(First PvpBounds)
    -- ^ See 'configPvpBounds'

  , ConfigMonoid -> FirstTrue
modifyCodePage      :: !FirstTrue
    -- ^ See 'configModifyCodePage'

  , ConfigMonoid -> FirstFalse
rebuildGhcOptions   :: !FirstFalse
    -- ^ See 'configMonoidRebuildGhcOptions'

  , ConfigMonoid -> First ApplyGhcOptions
applyGhcOptions     :: !(First ApplyGhcOptions)
    -- ^ See 'configApplyGhcOptions'

  , ConfigMonoid -> First ApplyProgOptions
applyProgOptions     :: !(First ApplyProgOptions)
    -- ^ See 'configApplyProgOptions'

  , ConfigMonoid -> First Bool
allowNewer          :: !(First Bool)
    -- ^ See 'configMonoidAllowNewer'

  , ConfigMonoid -> Maybe AllowNewerDeps
allowNewerDeps      :: !(Maybe AllowNewerDeps)
    -- ^ See 'configMonoidAllowNewerDeps'

  , ConfigMonoid -> First TemplateName
defaultTemplate     :: !(First TemplateName)
   -- ^ The default template to use when none is specified.

   -- (If Nothing, the 'default' default template is used.)

  , ConfigMonoid -> First Bool
allowDifferentUser :: !(First Bool)
   -- ^ Allow users other than the Stack root owner to use the Stack

   -- installation.

  , ConfigMonoid -> First DumpLogs
dumpLogs           :: !(First DumpLogs)
    -- ^ See 'configDumpLogs'

  , ConfigMonoid -> First Bool
saveHackageCreds   :: !(First Bool)
    -- ^ See 'configSaveHackageCreds'

  , ConfigMonoid -> First Text
hackageBaseUrl     :: !(First Text)
    -- ^ See 'configHackageBaseUrl'

  , ConfigMonoid -> First ColorWhen
colorWhen          :: !(First ColorWhen)
    -- ^ When to use 'ANSI' colors

  , ConfigMonoid -> StylesUpdate
styles             :: !StylesUpdate
  , ConfigMonoid -> FirstTrue
hideSourcePaths    :: !FirstTrue
    -- ^ See 'configHideSourcePaths'

  , ConfigMonoid -> FirstTrue
recommendUpgrade   :: !FirstTrue
    -- ^ See 'configRecommendUpgrade'

  , ConfigMonoid -> FirstTrue
notifyIfNixOnPath  :: !FirstTrue
    -- ^ See 'configNotifyIfNixOnPath'

  , ConfigMonoid -> FirstTrue
notifyIfGhcUntested  :: !FirstTrue
    -- ^ See 'configNotifyIfGhcUntested'

  , ConfigMonoid -> FirstTrue
notifyIfCabalUntested  :: !FirstTrue
    -- ^ See 'configNotifyIfCabalUntested'

  , ConfigMonoid -> FirstTrue
notifyIfArchUnknown  :: !FirstTrue
    -- ^ See 'configNotifyIfArchUnknown'

  , ConfigMonoid -> CasaOptsMonoid
casaOpts :: !CasaOptsMonoid
    -- ^ Casa configuration options.

  , ConfigMonoid -> First CasaRepoPrefix
casaRepoPrefix     :: !(First CasaRepoPrefix)
    -- ^ Casa repository prefix (deprecated).

  , ConfigMonoid -> First Text
snapshotLocation :: !(First Text)
    -- ^ Custom location of LTS/Nightly snapshots

  , ConfigMonoid -> FirstFalse
noRunCompile  :: !FirstFalse
    -- ^ See: 'configNoRunCompile'

  , ConfigMonoid -> First Bool
stackDeveloperMode :: !(First Bool)
    -- ^ See 'configStackDeveloperMode'

  }
  deriving ((forall x. ConfigMonoid -> Rep ConfigMonoid x)
-> (forall x. Rep ConfigMonoid x -> ConfigMonoid)
-> Generic ConfigMonoid
forall x. Rep ConfigMonoid x -> ConfigMonoid
forall x. ConfigMonoid -> Rep ConfigMonoid x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. ConfigMonoid -> Rep ConfigMonoid x
from :: forall x. ConfigMonoid -> Rep ConfigMonoid x
$cto :: forall x. Rep ConfigMonoid x -> ConfigMonoid
to :: forall x. Rep ConfigMonoid x -> ConfigMonoid
Generic, Int -> ConfigMonoid -> ShowS
[ConfigMonoid] -> ShowS
ConfigMonoid -> String
(Int -> ConfigMonoid -> ShowS)
-> (ConfigMonoid -> String)
-> ([ConfigMonoid] -> ShowS)
-> Show ConfigMonoid
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ConfigMonoid -> ShowS
showsPrec :: Int -> ConfigMonoid -> ShowS
$cshow :: ConfigMonoid -> String
show :: ConfigMonoid -> String
$cshowList :: [ConfigMonoid] -> ShowS
showList :: [ConfigMonoid] -> ShowS
Show)

instance Semigroup ConfigMonoid where
  <> :: ConfigMonoid -> ConfigMonoid -> ConfigMonoid
(<>) = ConfigMonoid -> ConfigMonoid -> ConfigMonoid
forall a. (Generic a, Monoid' (Rep a)) => a -> a -> a
mappenddefault

instance Monoid ConfigMonoid where
  mempty :: ConfigMonoid
mempty = ConfigMonoid
forall a. (Generic a, Monoid' (Rep a)) => a
memptydefault
  mappend :: ConfigMonoid -> ConfigMonoid -> ConfigMonoid
mappend = ConfigMonoid -> ConfigMonoid -> ConfigMonoid
forall a. Semigroup a => a -> a -> a
(<>)

parseConfigMonoid ::
     Path Abs Dir
  -> Value
  -> Yaml.Parser (WithJSONWarnings ConfigMonoid)
parseConfigMonoid :: Path Abs Dir -> Value -> Parser (WithJSONWarnings ConfigMonoid)
parseConfigMonoid = String
-> (Object -> WarningParser ConfigMonoid)
-> Value
-> Parser (WithJSONWarnings ConfigMonoid)
forall a.
String
-> (Object -> WarningParser a)
-> Value
-> Parser (WithJSONWarnings a)
withObjectWarnings String
"ConfigMonoid" ((Object -> WarningParser ConfigMonoid)
 -> Value -> Parser (WithJSONWarnings ConfigMonoid))
-> (Path Abs Dir -> Object -> WarningParser ConfigMonoid)
-> Path Abs Dir
-> Value
-> Parser (WithJSONWarnings ConfigMonoid)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject

-- | Parse a partial configuration.  Used both to parse both a standalone config

-- file and a project file, so that a sub-parser is not required, which would

-- interfere with warnings for missing fields.

parseConfigMonoidObject :: Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject :: Path Abs Dir -> Object -> WarningParser ConfigMonoid
parseConfigMonoidObject Path Abs Dir
rootDir Object
obj = do
  -- Parsing 'stackRoot' from 'stackRoot'/config.yaml would be nonsensical

  let stackRoot :: First a
stackRoot = Maybe a -> First a
forall a. Maybe a -> First a
First Maybe a
forall a. Maybe a
Nothing
  First (Path Rel Dir)
workDir <- Maybe (Path Rel Dir) -> First (Path Rel Dir)
forall a. Maybe a -> First a
First (Maybe (Path Rel Dir) -> First (Path Rel Dir))
-> WriterT WarningParserMonoid Parser (Maybe (Path Rel Dir))
-> WriterT WarningParserMonoid Parser (First (Path Rel Dir))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe (Path Rel Dir))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidWorkDirName
  BuildOptsMonoid
buildOpts <- WarningParser (WithJSONWarnings BuildOptsMonoid)
-> WarningParser BuildOptsMonoid
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (Object
obj Object
-> Text -> WarningParser (Maybe (WithJSONWarnings BuildOptsMonoid))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidBuildOptsName WarningParser (Maybe (WithJSONWarnings BuildOptsMonoid))
-> WithJSONWarnings BuildOptsMonoid
-> WarningParser (WithJSONWarnings BuildOptsMonoid)
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= WithJSONWarnings BuildOptsMonoid
forall a. Monoid a => a
mempty)
  DockerOptsMonoid
dockerOpts <-
    WarningParser (WithJSONWarnings DockerOptsMonoid)
-> WarningParser DockerOptsMonoid
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (Object
obj Object
-> Text
-> WarningParser (Maybe (WithJSONWarnings DockerOptsMonoid))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidDockerOptsName WarningParser (Maybe (WithJSONWarnings DockerOptsMonoid))
-> WithJSONWarnings DockerOptsMonoid
-> WarningParser (WithJSONWarnings DockerOptsMonoid)
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= WithJSONWarnings DockerOptsMonoid
forall a. Monoid a => a
mempty)
  NixOptsMonoid
nixOpts <- WarningParser (WithJSONWarnings NixOptsMonoid)
-> WarningParser NixOptsMonoid
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (Object
obj Object
-> Text -> WarningParser (Maybe (WithJSONWarnings NixOptsMonoid))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNixOptsName WarningParser (Maybe (WithJSONWarnings NixOptsMonoid))
-> WithJSONWarnings NixOptsMonoid
-> WarningParser (WithJSONWarnings NixOptsMonoid)
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= WithJSONWarnings NixOptsMonoid
forall a. Monoid a => a
mempty)
  First Int
connectionCount <- Maybe Int -> First Int
forall a. Maybe a -> First a
First (Maybe Int -> First Int)
-> WriterT WarningParserMonoid Parser (Maybe Int)
-> WriterT WarningParserMonoid Parser (First Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidConnectionCountName
  FirstTrue
hideTHLoading <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidHideTHLoadingName
  First Bool
prefixTimestamps <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidPrefixTimestampsName

  Maybe Value
murls :: Maybe Value <- Object
obj Object -> Text -> WarningParser (Maybe Value)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidUrlsName
  First Text
latestSnapshot <-
    case Maybe Value
murls of
      Maybe Value
Nothing -> First Text -> WriterT WarningParserMonoid Parser (First Text)
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (First Text -> WriterT WarningParserMonoid Parser (First Text))
-> First Text -> WriterT WarningParserMonoid Parser (First Text)
forall a b. (a -> b) -> a -> b
$ Maybe Text -> First Text
forall a. Maybe a -> First a
First Maybe Text
forall a. Maybe a
Nothing
      Just Value
urls -> WarningParser (WithJSONWarnings (First Text))
-> WriterT WarningParserMonoid Parser (First Text)
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (WarningParser (WithJSONWarnings (First Text))
 -> WriterT WarningParserMonoid Parser (First Text))
-> WarningParser (WithJSONWarnings (First Text))
-> WriterT WarningParserMonoid Parser (First Text)
forall a b. (a -> b) -> a -> b
$ Parser (WithJSONWarnings (First Text))
-> WarningParser (WithJSONWarnings (First Text))
forall (m :: * -> *) a.
Monad m =>
m a -> WriterT WarningParserMonoid m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser (WithJSONWarnings (First Text))
 -> WarningParser (WithJSONWarnings (First Text)))
-> Parser (WithJSONWarnings (First Text))
-> WarningParser (WithJSONWarnings (First Text))
forall a b. (a -> b) -> a -> b
$ String
-> (Object -> WriterT WarningParserMonoid Parser (First Text))
-> Value
-> Parser (WithJSONWarnings (First Text))
forall a.
String
-> (Object -> WarningParser a)
-> Value
-> Parser (WithJSONWarnings a)
withObjectWarnings
        String
"urls"
        (\Object
o -> Maybe Text -> First Text
forall a. Maybe a -> First a
First (Maybe Text -> First Text)
-> WriterT WarningParserMonoid Parser (Maybe Text)
-> WriterT WarningParserMonoid Parser (First Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
o Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
"latest-snapshot" :: WarningParser (First Text))
        Value
urls

  First PackageIndexConfig
packageIndex <-
    Maybe PackageIndexConfig -> First PackageIndexConfig
forall a. Maybe a -> First a
First (Maybe PackageIndexConfig -> First PackageIndexConfig)
-> WriterT WarningParserMonoid Parser (Maybe PackageIndexConfig)
-> WriterT WarningParserMonoid Parser (First PackageIndexConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> WarningParser (Maybe (WithJSONWarnings PackageIndexConfig))
-> WriterT WarningParserMonoid Parser (Maybe PackageIndexConfig)
forall (t :: * -> *) a.
Traversable t =>
WarningParser (t (WithJSONWarnings a)) -> WarningParser (t a)
jsonSubWarningsT (Object
obj Object
-> Text
-> WarningParser (Maybe (WithJSONWarnings PackageIndexConfig))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:?  Text
configMonoidPackageIndexName)
  First [PackageIndexConfig]
packageIndices <-
    Maybe [PackageIndexConfig] -> First [PackageIndexConfig]
forall a. Maybe a -> First a
First (Maybe [PackageIndexConfig] -> First [PackageIndexConfig])
-> WriterT WarningParserMonoid Parser (Maybe [PackageIndexConfig])
-> WriterT WarningParserMonoid Parser (First [PackageIndexConfig])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> WarningParser (Maybe [WithJSONWarnings PackageIndexConfig])
-> WriterT WarningParserMonoid Parser (Maybe [PackageIndexConfig])
forall (t :: * -> *) (u :: * -> *) a.
(Traversable t, Traversable u) =>
WarningParser (u (t (WithJSONWarnings a)))
-> WarningParser (u (t a))
jsonSubWarningsTT (Object
obj Object
-> Text
-> WarningParser (Maybe [WithJSONWarnings PackageIndexConfig])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:?  Text
configMonoidPackageIndicesName)
  First Bool
systemGHC <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSystemGHCName
  FirstTrue
installGHC <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidInstallGHCName
  FirstFalse
skipGHCCheck <- Maybe Bool -> FirstFalse
FirstFalse (Maybe Bool -> FirstFalse)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstFalse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSkipGHCCheckName
  FirstFalse
skipMsys <- Maybe Bool -> FirstFalse
FirstFalse (Maybe Bool -> FirstFalse)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstFalse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSkipMsysName
  IntersectingVersionRange
requireStackVersion <-
    VersionRange -> IntersectingVersionRange
IntersectingVersionRange (VersionRange -> IntersectingVersionRange)
-> (VersionRangeJSON -> VersionRange)
-> VersionRangeJSON
-> IntersectingVersionRange
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (.versionRangeJSON) (VersionRangeJSON -> IntersectingVersionRange)
-> WriterT WarningParserMonoid Parser VersionRangeJSON
-> WriterT WarningParserMonoid Parser IntersectingVersionRange
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
      ( Object
obj Object -> Text -> WarningParser (Maybe VersionRangeJSON)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidRequireStackVersionName
          WarningParser (Maybe VersionRangeJSON)
-> VersionRangeJSON
-> WriterT WarningParserMonoid Parser VersionRangeJSON
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= VersionRange -> VersionRangeJSON
VersionRangeJSON VersionRange
anyVersion
      )
  First String
arch <- Maybe String -> First String
forall a. Maybe a -> First a
First (Maybe String -> First String)
-> WriterT WarningParserMonoid Parser (Maybe String)
-> WriterT WarningParserMonoid Parser (First String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe String)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidArchName
  First GHCVariant
ghcVariant <- Maybe GHCVariant -> First GHCVariant
forall a. Maybe a -> First a
First (Maybe GHCVariant -> First GHCVariant)
-> WriterT WarningParserMonoid Parser (Maybe GHCVariant)
-> WriterT WarningParserMonoid Parser (First GHCVariant)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe GHCVariant)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidGHCVariantName
  First CompilerBuild
ghcBuild <- Maybe CompilerBuild -> First CompilerBuild
forall a. Maybe a -> First a
First (Maybe CompilerBuild -> First CompilerBuild)
-> WriterT WarningParserMonoid Parser (Maybe CompilerBuild)
-> WriterT WarningParserMonoid Parser (First CompilerBuild)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe CompilerBuild)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidGHCBuildName
  First Int
jobs <- Maybe Int -> First Int
forall a. Maybe a -> First a
First (Maybe Int -> First Int)
-> WriterT WarningParserMonoid Parser (Maybe Int)
-> WriterT WarningParserMonoid Parser (First Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Int)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidJobsName
  [String]
extraIncludeDirs <- ShowS -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Path Abs Dir -> String
forall b t. Path b t -> String
toFilePath Path Abs Dir
rootDir FilePath.</>) ([String] -> [String])
-> WriterT WarningParserMonoid Parser [String]
-> WriterT WarningParserMonoid Parser [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
    Object
obj Object -> Text -> WarningParser (Maybe [String])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:?  Text
configMonoidExtraIncludeDirsName WarningParser (Maybe [String])
-> [String] -> WriterT WarningParserMonoid Parser [String]
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= []
  [String]
extraLibDirs <- ShowS -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Path Abs Dir -> String
forall b t. Path b t -> String
toFilePath Path Abs Dir
rootDir FilePath.</>) ([String] -> [String])
-> WriterT WarningParserMonoid Parser [String]
-> WriterT WarningParserMonoid Parser [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
    Object
obj Object -> Text -> WarningParser (Maybe [String])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:?  Text
configMonoidExtraLibDirsName WarningParser (Maybe [String])
-> [String] -> WriterT WarningParserMonoid Parser [String]
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= []
  [Text]
customPreprocessorExts <-
    Object
obj Object -> Text -> WarningParser (Maybe [Text])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:?  Text
configMonoidCustomPreprocessorExtsName WarningParser (Maybe [Text]) -> [Text] -> WarningParser [Text]
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= []
  First (Path Abs File)
overrideGccPath <- Maybe (Path Abs File) -> First (Path Abs File)
forall a. Maybe a -> First a
First (Maybe (Path Abs File) -> First (Path Abs File))
-> WriterT WarningParserMonoid Parser (Maybe (Path Abs File))
-> WriterT WarningParserMonoid Parser (First (Path Abs File))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe (Path Abs File))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidOverrideGccPathName
  First String
overrideHpack <- Maybe String -> First String
forall a. Maybe a -> First a
First (Maybe String -> First String)
-> WriterT WarningParserMonoid Parser (Maybe String)
-> WriterT WarningParserMonoid Parser (First String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe String)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidOverrideHpackName
  First Bool
concurrentTests <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidConcurrentTestsName
  First String
localBinPath <- Maybe String -> First String
forall a. Maybe a -> First a
First (Maybe String -> First String)
-> WriterT WarningParserMonoid Parser (Maybe String)
-> WriterT WarningParserMonoid Parser (First String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe String)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidLocalBinPathName
  Maybe Object
templates <- Object
obj Object -> Text -> WarningParser (Maybe Object)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
"templates"
  (First SCM
scmInit, Map Text Text
templateParameters) <-
    case Maybe Object
templates of
      Maybe Object
Nothing -> (First SCM, Map Text Text)
-> WriterT WarningParserMonoid Parser (First SCM, Map Text Text)
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe SCM -> First SCM
forall a. Maybe a -> First a
First Maybe SCM
forall a. Maybe a
Nothing,Map Text Text
forall k a. Map k a
M.empty)
      Just Object
tobj -> do
        Maybe SCM
scmInit <- Object
tobj Object -> Text -> WarningParser (Maybe SCM)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidScmInitName
        Maybe (Map Text Text)
params <- Object
tobj Object -> Text -> WarningParser (Maybe (Map Text Text))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidTemplateParametersName
        (First SCM, Map Text Text)
-> WriterT WarningParserMonoid Parser (First SCM, Map Text Text)
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe SCM -> First SCM
forall a. Maybe a -> First a
First Maybe SCM
scmInit,Map Text Text -> Maybe (Map Text Text) -> Map Text Text
forall a. a -> Maybe a -> a
fromMaybe Map Text Text
forall k a. Map k a
M.empty Maybe (Map Text Text)
params)
  First VersionCheck
compilerCheck <- Maybe VersionCheck -> First VersionCheck
forall a. Maybe a -> First a
First (Maybe VersionCheck -> First VersionCheck)
-> WriterT WarningParserMonoid Parser (Maybe VersionCheck)
-> WriterT WarningParserMonoid Parser (First VersionCheck)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe VersionCheck)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidCompilerCheckName
  First CompilerRepository
compilerRepository <- Maybe CompilerRepository -> First CompilerRepository
forall a. Maybe a -> First a
First (Maybe CompilerRepository -> First CompilerRepository)
-> WriterT WarningParserMonoid Parser (Maybe CompilerRepository)
-> WriterT WarningParserMonoid Parser (First CompilerRepository)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe CompilerRepository)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidCompilerRepositoryName)

  Map GhcOptionKey [Text]
options <- (GhcOptions -> [Text])
-> Map GhcOptionKey GhcOptions -> Map GhcOptionKey [Text]
forall a b k. (a -> b) -> Map k a -> Map k b
Map.map (.ghcOptions) (Map GhcOptionKey GhcOptions -> Map GhcOptionKey [Text])
-> WriterT WarningParserMonoid Parser (Map GhcOptionKey GhcOptions)
-> WriterT WarningParserMonoid Parser (Map GhcOptionKey [Text])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
    Object
obj Object
-> Text -> WarningParser (Maybe (Map GhcOptionKey GhcOptions))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidGhcOptionsName WarningParser (Maybe (Map GhcOptionKey GhcOptions))
-> Map GhcOptionKey GhcOptions
-> WriterT WarningParserMonoid Parser (Map GhcOptionKey GhcOptions)
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= (Map GhcOptionKey GhcOptions
forall a. Monoid a => a
mempty :: Map GhcOptionKey GhcOptions)

  [Text]
optionsEverything <-
    case (GhcOptionKey -> Map GhcOptionKey [Text] -> Maybe [Text]
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup GhcOptionKey
GOKOldEverything Map GhcOptionKey [Text]
options, GhcOptionKey -> Map GhcOptionKey [Text] -> Maybe [Text]
forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup GhcOptionKey
GOKEverything Map GhcOptionKey [Text]
options) of
      (Just [Text]
_, Just [Text]
_) ->
        String -> WarningParser [Text]
forall a. String -> WriterT WarningParserMonoid Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Cannot specify both `*` and `$everything` GHC options"
      (Maybe [Text]
Nothing, Just [Text]
x) -> [Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
x
      (Just [Text]
x, Maybe [Text]
Nothing) -> do
        WarningParserMonoid -> WriterT WarningParserMonoid Parser ()
forall w (m :: * -> *). MonadWriter w m => w -> m ()
tell WarningParserMonoid
"The `*` ghc-options key is not recommended. Consider using \
             \$locals, or if really needed, $everything"
        [Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
x
      (Maybe [Text]
Nothing, Maybe [Text]
Nothing) -> [Text] -> WarningParser [Text]
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []

  let ghcOptionsByCat :: MonoidMap ApplyGhcOptions (Dual [Text])
ghcOptionsByCat = Map ApplyGhcOptions [Text]
-> MonoidMap ApplyGhcOptions (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map ApplyGhcOptions [Text]
 -> MonoidMap ApplyGhcOptions (Dual [Text]))
-> Map ApplyGhcOptions [Text]
-> MonoidMap ApplyGhcOptions (Dual [Text])
forall a b. (a -> b) -> a -> b
$ [(ApplyGhcOptions, [Text])] -> Map ApplyGhcOptions [Text]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
        [ (ApplyGhcOptions
AGOEverything, [Text]
optionsEverything)
        , (ApplyGhcOptions
AGOLocals, [Text] -> GhcOptionKey -> Map GhcOptionKey [Text] -> [Text]
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault [] GhcOptionKey
GOKLocals Map GhcOptionKey [Text]
options)
        , (ApplyGhcOptions
AGOTargets, [Text] -> GhcOptionKey -> Map GhcOptionKey [Text] -> [Text]
forall k a. Ord k => a -> k -> Map k a -> a
Map.findWithDefault [] GhcOptionKey
GOKTargets Map GhcOptionKey [Text]
options)
        ]

      ghcOptionsByName :: MonoidMap PackageName (Dual [Text])
ghcOptionsByName = Map PackageName [Text] -> MonoidMap PackageName (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map PackageName [Text] -> MonoidMap PackageName (Dual [Text]))
-> Map PackageName [Text] -> MonoidMap PackageName (Dual [Text])
forall a b. (a -> b) -> a -> b
$ [(PackageName, [Text])] -> Map PackageName [Text]
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList
          [(PackageName
name, [Text]
opts) | (GOKPackage PackageName
name, [Text]
opts) <- Map GhcOptionKey [Text] -> [(GhcOptionKey, [Text])]
forall k a. Map k a -> [(k, a)]
Map.toList Map GhcOptionKey [Text]
options]

  Map CabalConfigKey [Text]
cabalConfigOpts' <- Object
obj Object -> Text -> WarningParser (Maybe (Map CabalConfigKey [Text]))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidConfigureOptionsName WarningParser (Maybe (Map CabalConfigKey [Text]))
-> Map CabalConfigKey [Text]
-> WarningParser (Map CabalConfigKey [Text])
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= Map CabalConfigKey [Text]
forall a. Monoid a => a
mempty
  let cabalConfigOpts :: MonoidMap CabalConfigKey (Dual [Text])
cabalConfigOpts = Map CabalConfigKey [Text] -> MonoidMap CabalConfigKey (Dual [Text])
forall a b. Coercible a b => a -> b
coerce (Map CabalConfigKey [Text]
cabalConfigOpts' :: Map CabalConfigKey [Text])
  [Path Abs Dir]
extraPath <- Object
obj Object -> Text -> WarningParser (Maybe [Path Abs Dir])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidExtraPathName WarningParser (Maybe [Path Abs Dir])
-> [Path Abs Dir] -> WarningParser [Path Abs Dir]
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= []
  [String]
setupInfoLocations <- Object
obj Object -> Text -> WarningParser (Maybe [String])
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSetupInfoLocationsName WarningParser (Maybe [String])
-> [String] -> WriterT WarningParserMonoid Parser [String]
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= []
  SetupInfo
setupInfoInline <-
    WarningParser (Maybe (WithJSONWarnings SetupInfo))
-> WarningParser (Maybe SetupInfo)
forall (t :: * -> *) a.
Traversable t =>
WarningParser (t (WithJSONWarnings a)) -> WarningParser (t a)
jsonSubWarningsT (Object
obj Object
-> Text -> WarningParser (Maybe (WithJSONWarnings SetupInfo))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSetupInfoInlineName) WarningParser (Maybe SetupInfo)
-> SetupInfo -> WarningParser SetupInfo
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= SetupInfo
forall a. Monoid a => a
mempty
  First (Path Abs Dir)
localProgramsBase <- Maybe (Path Abs Dir) -> First (Path Abs Dir)
forall a. Maybe a -> First a
First (Maybe (Path Abs Dir) -> First (Path Abs Dir))
-> WriterT WarningParserMonoid Parser (Maybe (Path Abs Dir))
-> WriterT WarningParserMonoid Parser (First (Path Abs Dir))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe (Path Abs Dir))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidLocalProgramsBaseName
  First PvpBounds
pvpBounds <- Maybe PvpBounds -> First PvpBounds
forall a. Maybe a -> First a
First (Maybe PvpBounds -> First PvpBounds)
-> WriterT WarningParserMonoid Parser (Maybe PvpBounds)
-> WriterT WarningParserMonoid Parser (First PvpBounds)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe PvpBounds)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidPvpBoundsName
  FirstTrue
modifyCodePage <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidModifyCodePageName
  FirstFalse
rebuildGhcOptions <- Maybe Bool -> FirstFalse
FirstFalse (Maybe Bool -> FirstFalse)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstFalse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidRebuildGhcOptionsName
  First ApplyGhcOptions
applyGhcOptions <- Maybe ApplyGhcOptions -> First ApplyGhcOptions
forall a. Maybe a -> First a
First (Maybe ApplyGhcOptions -> First ApplyGhcOptions)
-> WriterT WarningParserMonoid Parser (Maybe ApplyGhcOptions)
-> WriterT WarningParserMonoid Parser (First ApplyGhcOptions)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe ApplyGhcOptions)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidApplyGhcOptionsName
  First ApplyProgOptions
applyProgOptions <- Maybe ApplyProgOptions -> First ApplyProgOptions
forall a. Maybe a -> First a
First (Maybe ApplyProgOptions -> First ApplyProgOptions)
-> WriterT WarningParserMonoid Parser (Maybe ApplyProgOptions)
-> WriterT WarningParserMonoid Parser (First ApplyProgOptions)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe ApplyProgOptions)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidApplyProgOptionsName
  First Bool
allowNewer <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidAllowNewerName
  Maybe AllowNewerDeps
allowNewerDeps <- Object
obj Object -> Text -> WarningParser (Maybe AllowNewerDeps)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidAllowNewerDepsName
  First TemplateName
defaultTemplate <- Maybe TemplateName -> First TemplateName
forall a. Maybe a -> First a
First (Maybe TemplateName -> First TemplateName)
-> WriterT WarningParserMonoid Parser (Maybe TemplateName)
-> WriterT WarningParserMonoid Parser (First TemplateName)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe TemplateName)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidDefaultTemplateName
  First Bool
allowDifferentUser <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidAllowDifferentUserName
  First DumpLogs
dumpLogs <- Maybe DumpLogs -> First DumpLogs
forall a. Maybe a -> First a
First (Maybe DumpLogs -> First DumpLogs)
-> WriterT WarningParserMonoid Parser (Maybe DumpLogs)
-> WriterT WarningParserMonoid Parser (First DumpLogs)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text -> WriterT WarningParserMonoid Parser (Maybe DumpLogs)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidDumpLogsName
  First Bool
saveHackageCreds <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSaveHackageCredsName
  First Text
hackageBaseUrl <- Maybe Text -> First Text
forall a. Maybe a -> First a
First (Maybe Text -> First Text)
-> WriterT WarningParserMonoid Parser (Maybe Text)
-> WriterT WarningParserMonoid Parser (First Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidHackageBaseUrlName
  Maybe ColorWhen
configMonoidColorWhenUS <- Object
obj Object -> Text -> WarningParser (Maybe ColorWhen)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidColorWhenUSName
  Maybe ColorWhen
configMonoidColorWhenGB <- Object
obj Object -> Text -> WarningParser (Maybe ColorWhen)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidColorWhenGBName
  let colorWhen :: First ColorWhen
colorWhen = Maybe ColorWhen -> First ColorWhen
forall a. Maybe a -> First a
First (Maybe ColorWhen -> First ColorWhen)
-> Maybe ColorWhen -> First ColorWhen
forall a b. (a -> b) -> a -> b
$ Maybe ColorWhen
configMonoidColorWhenUS Maybe ColorWhen -> Maybe ColorWhen -> Maybe ColorWhen
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe ColorWhen
configMonoidColorWhenGB
  Maybe StylesUpdate
configMonoidStylesUS <- Object
obj Object -> Text -> WarningParser (Maybe StylesUpdate)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidStylesUSName
  Maybe StylesUpdate
configMonoidStylesGB <- Object
obj Object -> Text -> WarningParser (Maybe StylesUpdate)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidStylesGBName
  let styles :: StylesUpdate
styles = StylesUpdate -> Maybe StylesUpdate -> StylesUpdate
forall a. a -> Maybe a -> a
fromMaybe StylesUpdate
forall a. Monoid a => a
mempty (Maybe StylesUpdate -> StylesUpdate)
-> Maybe StylesUpdate -> StylesUpdate
forall a b. (a -> b) -> a -> b
$ Maybe StylesUpdate
configMonoidStylesUS Maybe StylesUpdate -> Maybe StylesUpdate -> Maybe StylesUpdate
forall a. Maybe a -> Maybe a -> Maybe a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe StylesUpdate
configMonoidStylesGB
  FirstTrue
hideSourcePaths <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidHideSourcePathsName
  FirstTrue
recommendUpgrade <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidRecommendUpgradeName
  FirstTrue
notifyIfNixOnPath <- Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNotifyIfNixOnPathName
  FirstTrue
notifyIfGhcUntested <-
    Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNotifyIfGhcUntestedName
  FirstTrue
notifyIfCabalUntested <-
    Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNotifyIfCabalUntestedName
  FirstTrue
notifyIfArchUnknown <-
    Maybe Bool -> FirstTrue
FirstTrue (Maybe Bool -> FirstTrue)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstTrue
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNotifyIfArchUnknownName
  CasaOptsMonoid
casaOpts <- WarningParser (WithJSONWarnings CasaOptsMonoid)
-> WarningParser CasaOptsMonoid
forall a. WarningParser (WithJSONWarnings a) -> WarningParser a
jsonSubWarnings (Object
obj Object
-> Text -> WarningParser (Maybe (WithJSONWarnings CasaOptsMonoid))
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidCasaOptsName WarningParser (Maybe (WithJSONWarnings CasaOptsMonoid))
-> WithJSONWarnings CasaOptsMonoid
-> WarningParser (WithJSONWarnings CasaOptsMonoid)
forall a. WarningParser (Maybe a) -> a -> WarningParser a
..!= WithJSONWarnings CasaOptsMonoid
forall a. Monoid a => a
mempty)
  First CasaRepoPrefix
casaRepoPrefix <- Maybe CasaRepoPrefix -> First CasaRepoPrefix
forall a. Maybe a -> First a
First (Maybe CasaRepoPrefix -> First CasaRepoPrefix)
-> WriterT WarningParserMonoid Parser (Maybe CasaRepoPrefix)
-> WriterT WarningParserMonoid Parser (First CasaRepoPrefix)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object
-> Text
-> WriterT WarningParserMonoid Parser (Maybe CasaRepoPrefix)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidCasaRepoPrefixName
  First Text
snapshotLocation <- Maybe Text -> First Text
forall a. Maybe a -> First a
First (Maybe Text -> First Text)
-> WriterT WarningParserMonoid Parser (Maybe Text)
-> WriterT WarningParserMonoid Parser (First Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Text)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidSnapshotLocationName
  FirstFalse
noRunCompile <- Maybe Bool -> FirstFalse
FirstFalse (Maybe Bool -> FirstFalse)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser FirstFalse
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidNoRunCompileName
  First Bool
stackDeveloperMode <- Maybe Bool -> First Bool
forall a. Maybe a -> First a
First (Maybe Bool -> First Bool)
-> WriterT WarningParserMonoid Parser (Maybe Bool)
-> WriterT WarningParserMonoid Parser (First Bool)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Object
obj Object -> Text -> WriterT WarningParserMonoid Parser (Maybe Bool)
forall a. FromJSON a => Object -> Text -> WarningParser (Maybe a)
..:? Text
configMonoidStackDeveloperModeName
  ConfigMonoid -> WarningParser ConfigMonoid
forall a. a -> WriterT WarningParserMonoid Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ConfigMonoid
    { First (Path Abs Dir)
forall {a}. First a
$sel:stackRoot:ConfigMonoid :: First (Path Abs Dir)
stackRoot :: forall {a}. First a
stackRoot
    , First (Path Rel Dir)
$sel:workDir:ConfigMonoid :: First (Path Rel Dir)
workDir :: First (Path Rel Dir)
workDir
    , BuildOptsMonoid
$sel:buildOpts:ConfigMonoid :: BuildOptsMonoid
buildOpts :: BuildOptsMonoid
buildOpts
    , DockerOptsMonoid
$sel:dockerOpts:ConfigMonoid :: DockerOptsMonoid
dockerOpts :: DockerOptsMonoid
dockerOpts
    , NixOptsMonoid
$sel:nixOpts:ConfigMonoid :: NixOptsMonoid
nixOpts :: NixOptsMonoid
nixOpts
    , First Int
$sel:connectionCount:ConfigMonoid :: First Int
connectionCount :: First Int
connectionCount
    , FirstTrue
$sel:hideTHLoading:ConfigMonoid :: FirstTrue
hideTHLoading :: FirstTrue
hideTHLoading
    , First Bool
$sel:prefixTimestamps:ConfigMonoid :: First Bool
prefixTimestamps :: First Bool
prefixTimestamps
    , First Text
$sel:latestSnapshot:ConfigMonoid :: First Text
latestSnapshot :: First Text
latestSnapshot
    , First PackageIndexConfig
$sel:packageIndex:ConfigMonoid :: First PackageIndexConfig
packageIndex :: First PackageIndexConfig
packageIndex
    , First [PackageIndexConfig]
$sel:packageIndices:ConfigMonoid :: First [PackageIndexConfig]
packageIndices :: First [PackageIndexConfig]
packageIndices
    , First Bool
$sel:systemGHC:ConfigMonoid :: First Bool
systemGHC :: First Bool
systemGHC
    , FirstTrue
$sel:installGHC:ConfigMonoid :: FirstTrue
installGHC :: FirstTrue
installGHC
    , FirstFalse
$sel:skipGHCCheck:ConfigMonoid :: FirstFalse
skipGHCCheck :: FirstFalse
skipGHCCheck
    , FirstFalse
$sel:skipMsys:ConfigMonoid :: FirstFalse
skipMsys :: FirstFalse
skipMsys
    , First VersionCheck
$sel:compilerCheck:ConfigMonoid :: First VersionCheck
compilerCheck :: First VersionCheck
compilerCheck
    , First CompilerRepository
$sel:compilerRepository:ConfigMonoid :: First CompilerRepository
compilerRepository :: First CompilerRepository
compilerRepository
    , IntersectingVersionRange
$sel:requireStackVersion:ConfigMonoid :: IntersectingVersionRange
requireStackVersion :: IntersectingVersionRange
requireStackVersion
    , First String
$sel:arch:ConfigMonoid :: First String
arch :: First String
arch
    , First GHCVariant
$sel:ghcVariant:ConfigMonoid :: First GHCVariant
ghcVariant :: First GHCVariant
ghcVariant
    , First CompilerBuild
$sel:ghcBuild:ConfigMonoid :: First CompilerBuild
ghcBuild :: First CompilerBuild
ghcBuild
    , First Int
$sel:jobs:ConfigMonoid :: First Int
jobs :: First Int
jobs
    , [String]
$sel:extraIncludeDirs:ConfigMonoid :: [String]
extraIncludeDirs :: [String]
extraIncludeDirs
    , [String]
$sel:extraLibDirs:ConfigMonoid :: [String]
extraLibDirs :: [String]
extraLibDirs
    , [Text]
$sel:customPreprocessorExts:ConfigMonoid :: [Text]
customPreprocessorExts :: [Text]
customPreprocessorExts
    , First (Path Abs File)
$sel:overrideGccPath:ConfigMonoid :: First (Path Abs File)
overrideGccPath :: First (Path Abs File)
overrideGccPath
    , First String
$sel:overrideHpack:ConfigMonoid :: First String
overrideHpack :: First String
overrideHpack
    , First Bool
$sel:concurrentTests:ConfigMonoid :: First Bool
concurrentTests :: First Bool
concurrentTests
    , First String
$sel:localBinPath:ConfigMonoid :: First String
localBinPath :: First String
localBinPath
    , Map Text Text
$sel:templateParameters:ConfigMonoid :: Map Text Text
templateParameters :: Map Text Text
templateParameters
    , First SCM
$sel:scmInit:ConfigMonoid :: First SCM
scmInit :: First SCM
scmInit
    , MonoidMap PackageName (Dual [Text])
$sel:ghcOptionsByName:ConfigMonoid :: MonoidMap PackageName (Dual [Text])
ghcOptionsByName :: MonoidMap PackageName (Dual [Text])
ghcOptionsByName
    , MonoidMap ApplyGhcOptions (Dual [Text])
$sel:ghcOptionsByCat:ConfigMonoid :: MonoidMap ApplyGhcOptions (Dual [Text])
ghcOptionsByCat :: MonoidMap ApplyGhcOptions (Dual [Text])
ghcOptionsByCat
    , MonoidMap CabalConfigKey (Dual [Text])
$sel:cabalConfigOpts:ConfigMonoid :: MonoidMap CabalConfigKey (Dual [Text])
cabalConfigOpts :: MonoidMap CabalConfigKey (Dual [Text])
cabalConfigOpts
    , [Path Abs Dir]
$sel:extraPath:ConfigMonoid :: [Path Abs Dir]
extraPath :: [Path Abs Dir]
extraPath
    , [String]
$sel:setupInfoLocations:ConfigMonoid :: [String]
setupInfoLocations :: [String]
setupInfoLocations
    , SetupInfo
$sel:setupInfoInline:ConfigMonoid :: SetupInfo
setupInfoInline :: SetupInfo
setupInfoInline
    , First (Path Abs Dir)
$sel:localProgramsBase:ConfigMonoid :: First (Path Abs Dir)
localProgramsBase :: First (Path Abs Dir)
localProgramsBase
    , First PvpBounds
$sel:pvpBounds:ConfigMonoid :: First PvpBounds
pvpBounds :: First PvpBounds
pvpBounds
    , FirstTrue
$sel:modifyCodePage:ConfigMonoid :: FirstTrue
modifyCodePage :: FirstTrue
modifyCodePage
    , FirstFalse
$sel:rebuildGhcOptions:ConfigMonoid :: FirstFalse
rebuildGhcOptions :: FirstFalse
rebuildGhcOptions
    , First ApplyGhcOptions
$sel:applyGhcOptions:ConfigMonoid :: First ApplyGhcOptions
applyGhcOptions :: First ApplyGhcOptions
applyGhcOptions
    , First ApplyProgOptions
$sel:applyProgOptions:ConfigMonoid :: First ApplyProgOptions
applyProgOptions :: First ApplyProgOptions
applyProgOptions
    , First Bool
$sel:allowNewer:ConfigMonoid :: First Bool
allowNewer :: First Bool
allowNewer
    , Maybe AllowNewerDeps
$sel:allowNewerDeps:ConfigMonoid :: Maybe AllowNewerDeps
allowNewerDeps :: Maybe AllowNewerDeps
allowNewerDeps
    , First TemplateName
$sel:defaultTemplate:ConfigMonoid :: First TemplateName
defaultTemplate :: First TemplateName
defaultTemplate
    , First Bool
$sel:allowDifferentUser:ConfigMonoid :: First Bool
allowDifferentUser :: First Bool
allowDifferentUser
    , First DumpLogs
$sel:dumpLogs:ConfigMonoid :: First DumpLogs
dumpLogs :: First DumpLogs
dumpLogs
    , First Bool
$sel:saveHackageCreds:ConfigMonoid :: First Bool
saveHackageCreds :: First Bool
saveHackageCreds
    , First Text
$sel:hackageBaseUrl:ConfigMonoid :: First Text
hackageBaseUrl :: First Text
hackageBaseUrl
    , First ColorWhen
$sel:colorWhen:ConfigMonoid :: First ColorWhen
colorWhen :: First ColorWhen
colorWhen
    , StylesUpdate
$sel:styles:ConfigMonoid :: StylesUpdate
styles :: StylesUpdate
styles
    , FirstTrue
$sel:hideSourcePaths:ConfigMonoid :: FirstTrue
hideSourcePaths :: FirstTrue
hideSourcePaths
    , FirstTrue
$sel:recommendUpgrade:ConfigMonoid :: FirstTrue
recommendUpgrade :: FirstTrue
recommendUpgrade
    , FirstTrue
$sel:notifyIfNixOnPath:ConfigMonoid :: FirstTrue
notifyIfNixOnPath :: FirstTrue
notifyIfNixOnPath
    , FirstTrue
$sel:notifyIfGhcUntested:ConfigMonoid :: FirstTrue
notifyIfGhcUntested :: FirstTrue
notifyIfGhcUntested
    , FirstTrue
$sel:notifyIfCabalUntested:ConfigMonoid :: FirstTrue
notifyIfCabalUntested :: FirstTrue
notifyIfCabalUntested
    , FirstTrue
$sel:notifyIfArchUnknown:ConfigMonoid :: FirstTrue
notifyIfArchUnknown :: FirstTrue
notifyIfArchUnknown
    , CasaOptsMonoid
$sel:casaOpts:ConfigMonoid :: CasaOptsMonoid
casaOpts :: CasaOptsMonoid
casaOpts
    , First CasaRepoPrefix
$sel:casaRepoPrefix:ConfigMonoid :: First CasaRepoPrefix
casaRepoPrefix :: First CasaRepoPrefix
casaRepoPrefix
    , First Text
$sel:snapshotLocation:ConfigMonoid :: First Text
snapshotLocation :: First Text
snapshotLocation
    , FirstFalse
$sel:noRunCompile:ConfigMonoid :: FirstFalse
noRunCompile :: FirstFalse
noRunCompile
    , First Bool
$sel:stackDeveloperMode:ConfigMonoid :: First Bool
stackDeveloperMode :: First Bool
stackDeveloperMode
    }

configMonoidWorkDirName :: Text
configMonoidWorkDirName :: Text
configMonoidWorkDirName = Text
"work-dir"

configMonoidBuildOptsName :: Text
configMonoidBuildOptsName :: Text
configMonoidBuildOptsName = Text
"build"

configMonoidDockerOptsName :: Text
configMonoidDockerOptsName :: Text
configMonoidDockerOptsName = Text
"docker"

configMonoidNixOptsName :: Text
configMonoidNixOptsName :: Text
configMonoidNixOptsName = Text
"nix"

configMonoidConfigureOptionsName :: Text
configMonoidConfigureOptionsName :: Text
configMonoidConfigureOptionsName = Text
"configure-options"

configMonoidConnectionCountName :: Text
configMonoidConnectionCountName :: Text
configMonoidConnectionCountName = Text
"connection-count"

configMonoidHideTHLoadingName :: Text
configMonoidHideTHLoadingName :: Text
configMonoidHideTHLoadingName = Text
"hide-th-loading"

configMonoidPrefixTimestampsName :: Text
configMonoidPrefixTimestampsName :: Text
configMonoidPrefixTimestampsName = Text
"build-output-timestamps"

configMonoidUrlsName :: Text
configMonoidUrlsName :: Text
configMonoidUrlsName = Text
"urls"

configMonoidPackageIndexName :: Text
configMonoidPackageIndexName :: Text
configMonoidPackageIndexName = Text
"package-index"

-- Deprecated in favour of package-index

configMonoidPackageIndicesName :: Text
configMonoidPackageIndicesName :: Text
configMonoidPackageIndicesName = Text
"package-indices"

configMonoidSystemGHCName :: Text
configMonoidSystemGHCName :: Text
configMonoidSystemGHCName = Text
"system-ghc"

configMonoidInstallGHCName :: Text
configMonoidInstallGHCName :: Text
configMonoidInstallGHCName = Text
"install-ghc"

configMonoidSkipGHCCheckName :: Text
configMonoidSkipGHCCheckName :: Text
configMonoidSkipGHCCheckName = Text
"skip-ghc-check"

configMonoidSkipMsysName :: Text
configMonoidSkipMsysName :: Text
configMonoidSkipMsysName = Text
"skip-msys"

configMonoidRequireStackVersionName :: Text
configMonoidRequireStackVersionName :: Text
configMonoidRequireStackVersionName = Text
"require-stack-version"

configMonoidArchName :: Text
configMonoidArchName :: Text
configMonoidArchName = Text
"arch"

configMonoidGHCVariantName :: Text
configMonoidGHCVariantName :: Text
configMonoidGHCVariantName = Text
"ghc-variant"

configMonoidGHCBuildName :: Text
configMonoidGHCBuildName :: Text
configMonoidGHCBuildName = Text
"ghc-build"

configMonoidJobsName :: Text
configMonoidJobsName :: Text
configMonoidJobsName = Text
"jobs"

configMonoidExtraIncludeDirsName :: Text
configMonoidExtraIncludeDirsName :: Text
configMonoidExtraIncludeDirsName = Text
"extra-include-dirs"

configMonoidExtraLibDirsName :: Text
configMonoidExtraLibDirsName :: Text
configMonoidExtraLibDirsName = Text
"extra-lib-dirs"

configMonoidCustomPreprocessorExtsName  :: Text
configMonoidCustomPreprocessorExtsName :: Text
configMonoidCustomPreprocessorExtsName  = Text
"custom-preprocessor-extensions"

configMonoidOverrideGccPathName :: Text
configMonoidOverrideGccPathName :: Text
configMonoidOverrideGccPathName = Text
"with-gcc"

configMonoidOverrideHpackName :: Text
configMonoidOverrideHpackName :: Text
configMonoidOverrideHpackName = Text
"with-hpack"

configMonoidConcurrentTestsName :: Text
configMonoidConcurrentTestsName :: Text
configMonoidConcurrentTestsName = Text
"concurrent-tests"

configMonoidLocalBinPathName :: Text
configMonoidLocalBinPathName :: Text
configMonoidLocalBinPathName = Text
"local-bin-path"

configMonoidScmInitName :: Text
configMonoidScmInitName :: Text
configMonoidScmInitName = Text
"scm-init"

configMonoidTemplateParametersName :: Text
configMonoidTemplateParametersName :: Text
configMonoidTemplateParametersName = Text
"params"

configMonoidCompilerCheckName :: Text
configMonoidCompilerCheckName :: Text
configMonoidCompilerCheckName = Text
"compiler-check"

configMonoidCompilerRepositoryName :: Text
configMonoidCompilerRepositoryName :: Text
configMonoidCompilerRepositoryName = Text
"compiler-repository"

configMonoidGhcOptionsName :: Text
configMonoidGhcOptionsName :: Text
configMonoidGhcOptionsName = Text
"ghc-options"

configMonoidExtraPathName :: Text
configMonoidExtraPathName :: Text
configMonoidExtraPathName = Text
"extra-path"

configMonoidSetupInfoLocationsName :: Text
configMonoidSetupInfoLocationsName :: Text
configMonoidSetupInfoLocationsName = Text
"setup-info-locations"

configMonoidSetupInfoInlineName :: Text
configMonoidSetupInfoInlineName :: Text
configMonoidSetupInfoInlineName = Text
"setup-info"

configMonoidLocalProgramsBaseName :: Text
configMonoidLocalProgramsBaseName :: Text
configMonoidLocalProgramsBaseName = Text
"local-programs-path"

configMonoidPvpBoundsName :: Text
configMonoidPvpBoundsName :: Text
configMonoidPvpBoundsName = Text
"pvp-bounds"

configMonoidModifyCodePageName :: Text
configMonoidModifyCodePageName :: Text
configMonoidModifyCodePageName = Text
"modify-code-page"

configMonoidRebuildGhcOptionsName :: Text
configMonoidRebuildGhcOptionsName :: Text
configMonoidRebuildGhcOptionsName = Text
"rebuild-ghc-options"

configMonoidApplyGhcOptionsName :: Text
configMonoidApplyGhcOptionsName :: Text
configMonoidApplyGhcOptionsName = Text
"apply-ghc-options"

configMonoidApplyProgOptionsName :: Text
configMonoidApplyProgOptionsName :: Text
configMonoidApplyProgOptionsName = Text
"apply-prog-options"

configMonoidAllowNewerName :: Text
configMonoidAllowNewerName :: Text
configMonoidAllowNewerName = Text
"allow-newer"

configMonoidAllowNewerDepsName :: Text
configMonoidAllowNewerDepsName :: Text
configMonoidAllowNewerDepsName = Text
"allow-newer-deps"

configMonoidDefaultTemplateName :: Text
configMonoidDefaultTemplateName :: Text
configMonoidDefaultTemplateName = Text
"default-template"

configMonoidAllowDifferentUserName :: Text
configMonoidAllowDifferentUserName :: Text
configMonoidAllowDifferentUserName = Text
"allow-different-user"

configMonoidDumpLogsName :: Text
configMonoidDumpLogsName :: Text
configMonoidDumpLogsName = Text
"dump-logs"

configMonoidSaveHackageCredsName :: Text
configMonoidSaveHackageCredsName :: Text
configMonoidSaveHackageCredsName = Text
"save-hackage-creds"

configMonoidHackageBaseUrlName :: Text
configMonoidHackageBaseUrlName :: Text
configMonoidHackageBaseUrlName = Text
"hackage-base-url"

configMonoidColorWhenUSName :: Text
configMonoidColorWhenUSName :: Text
configMonoidColorWhenUSName = Text
"color"

configMonoidColorWhenGBName :: Text
configMonoidColorWhenGBName :: Text
configMonoidColorWhenGBName = Text
"colour"

configMonoidStylesUSName :: Text
configMonoidStylesUSName :: Text
configMonoidStylesUSName = Text
"stack-colors"

configMonoidStylesGBName :: Text
configMonoidStylesGBName :: Text
configMonoidStylesGBName = Text
"stack-colours"

configMonoidHideSourcePathsName :: Text
configMonoidHideSourcePathsName :: Text
configMonoidHideSourcePathsName = Text
"hide-source-paths"

configMonoidRecommendUpgradeName :: Text
configMonoidRecommendUpgradeName :: Text
configMonoidRecommendUpgradeName = Text
"recommend-stack-upgrade"

configMonoidNotifyIfNixOnPathName :: Text
configMonoidNotifyIfNixOnPathName :: Text
configMonoidNotifyIfNixOnPathName = Text
"notify-if-nix-on-path"

configMonoidNotifyIfGhcUntestedName :: Text
configMonoidNotifyIfGhcUntestedName :: Text
configMonoidNotifyIfGhcUntestedName = Text
"notify-if-ghc-untested"

configMonoidNotifyIfCabalUntestedName :: Text
configMonoidNotifyIfCabalUntestedName :: Text
configMonoidNotifyIfCabalUntestedName = Text
"notify-if-cabal-untested"

configMonoidNotifyIfArchUnknownName :: Text
configMonoidNotifyIfArchUnknownName :: Text
configMonoidNotifyIfArchUnknownName = Text
"notify-if-arch-unknown"

configMonoidCasaOptsName :: Text
configMonoidCasaOptsName :: Text
configMonoidCasaOptsName = Text
"casa"

configMonoidCasaRepoPrefixName :: Text
configMonoidCasaRepoPrefixName :: Text
configMonoidCasaRepoPrefixName = Text
"casa-repo-prefix"

configMonoidSnapshotLocationName :: Text
configMonoidSnapshotLocationName :: Text
configMonoidSnapshotLocationName = Text
"snapshot-location-base"

configMonoidNoRunCompileName :: Text
configMonoidNoRunCompileName :: Text
configMonoidNoRunCompileName = Text
"script-no-run-compile"

configMonoidStackDeveloperModeName :: Text
configMonoidStackDeveloperModeName :: Text
configMonoidStackDeveloperModeName = Text
"stack-developer-mode"