{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Summoner.Config
( ConfigP (..)
, PartialConfig
, Config
, configCodec
, defaultConfig
, guessConfigFromGit
, finalise
, loadFileConfig
) where
import Data.List (lookup)
import Generic.Data (gmappend, gmempty)
import Shellmet (($?), ($|))
import Toml (Key, TomlBiMap, TomlCodec, (.=))
import Validation (Validation (..))
import Summoner.CustomPrelude (CustomPrelude (..), customPreludeT)
import Summoner.Decision (Decision (..))
import Summoner.Default (defaultEmail, defaultFullName, defaultLicenseName, defaultOwner)
import Summoner.GhcVer (GhcVer (..), parseGhcVer, showGhcVer)
import Summoner.License (LicenseName (..), parseLicenseName)
import Summoner.Source (Source, sourceCodec)
import qualified Toml
data Phase
= Partial
| Final
infixl 3 :-
type family phase :- field where
'Partial :- field = Last field
'Final :- field = field
data ConfigP (p :: Phase) = ConfigP
{ ConfigP p -> p :- Text
cOwner :: !(p :- Text)
, ConfigP p -> p :- Text
cFullName :: !(p :- Text)
, ConfigP p -> p :- Text
cEmail :: !(p :- Text)
, ConfigP p -> p :- LicenseName
cLicense :: !(p :- LicenseName)
, ConfigP p -> p :- [GhcVer]
cGhcVer :: !(p :- [GhcVer])
, ConfigP p -> Decision
cCabal :: !Decision
, ConfigP p -> Decision
cStack :: !Decision
, ConfigP p -> Decision
cGitHub :: !Decision
, ConfigP p -> Decision
cGhActions :: !Decision
, ConfigP p -> Decision
cTravis :: !Decision
, ConfigP p -> Decision
cAppVey :: !Decision
, ConfigP p -> Decision
cPrivate :: !Decision
, ConfigP p -> Decision
cLib :: !Decision
, ConfigP p -> Decision
cExe :: !Decision
, ConfigP p -> Decision
cTest :: !Decision
, ConfigP p -> Decision
cBench :: !Decision
, ConfigP p -> Last CustomPrelude
cPrelude :: !(Last CustomPrelude)
, ConfigP p -> [Text]
cExtensions :: ![Text]
, ConfigP p -> [Text]
cGhcOptions :: ![Text]
, ConfigP p -> [Text]
cGitignore :: ![Text]
, ConfigP p -> Any
cNoUpload :: !Any
, ConfigP p -> Map FilePath Source
cFiles :: !(Map FilePath Source)
} deriving stock ((forall x. ConfigP p -> Rep (ConfigP p) x)
-> (forall x. Rep (ConfigP p) x -> ConfigP p)
-> Generic (ConfigP p)
forall x. Rep (ConfigP p) x -> ConfigP p
forall x. ConfigP p -> Rep (ConfigP p) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (p :: Phase) x. Rep (ConfigP p) x -> ConfigP p
forall (p :: Phase) x. ConfigP p -> Rep (ConfigP p) x
$cto :: forall (p :: Phase) x. Rep (ConfigP p) x -> ConfigP p
$cfrom :: forall (p :: Phase) x. ConfigP p -> Rep (ConfigP p) x
Generic)
deriving stock instance
( Eq (p :- Text)
, Eq (p :- LicenseName)
, Eq (p :- [GhcVer])
) => Eq (ConfigP p)
deriving stock instance
( Show (p :- Text)
, Show (p :- LicenseName)
, Show (p :- [GhcVer])
) => Show (ConfigP p)
instance Semigroup PartialConfig where
<> :: PartialConfig -> PartialConfig -> PartialConfig
(<>) = PartialConfig -> PartialConfig -> PartialConfig
forall a. (Generic a, Semigroup (Rep a ())) => a -> a -> a
gmappend
instance Monoid PartialConfig where
mempty :: PartialConfig
mempty = PartialConfig
forall a. (Generic a, Monoid (Rep a ())) => a
gmempty
mappend :: PartialConfig -> PartialConfig -> PartialConfig
mappend = PartialConfig -> PartialConfig -> PartialConfig
forall a. Semigroup a => a -> a -> a
(<>)
type PartialConfig = ConfigP 'Partial
type Config = ConfigP 'Final
defaultConfig :: PartialConfig
defaultConfig :: PartialConfig
defaultConfig = $WConfigP :: forall (p :: Phase).
(p :- Text)
-> (p :- Text)
-> (p :- Text)
-> (p :- LicenseName)
-> (p :- [GhcVer])
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> ConfigP p
ConfigP
{ cOwner :: 'Partial :- Text
cOwner = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
defaultOwner)
, cFullName :: 'Partial :- Text
cFullName = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
defaultFullName)
, cEmail :: 'Partial :- Text
cEmail = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
defaultEmail)
, cLicense :: 'Partial :- LicenseName
cLicense = Maybe LicenseName -> Last LicenseName
forall a. Maybe a -> Last a
Last (LicenseName -> Maybe LicenseName
forall a. a -> Maybe a
Just LicenseName
defaultLicenseName)
, cGhcVer :: 'Partial :- [GhcVer]
cGhcVer = Maybe [GhcVer] -> Last [GhcVer]
forall a. Maybe a -> Last a
Last ([GhcVer] -> Maybe [GhcVer]
forall a. a -> Maybe a
Just [])
, cCabal :: Decision
cCabal = Decision
Idk
, cStack :: Decision
cStack = Decision
Idk
, cGitHub :: Decision
cGitHub = Decision
Idk
, cGhActions :: Decision
cGhActions = Decision
Idk
, cTravis :: Decision
cTravis = Decision
Idk
, cAppVey :: Decision
cAppVey = Decision
Idk
, cPrivate :: Decision
cPrivate = Decision
Idk
, cLib :: Decision
cLib = Decision
Idk
, cExe :: Decision
cExe = Decision
Idk
, cTest :: Decision
cTest = Decision
Idk
, cBench :: Decision
cBench = Decision
Idk
, cPrelude :: Last CustomPrelude
cPrelude = Maybe CustomPrelude -> Last CustomPrelude
forall a. Maybe a -> Last a
Last Maybe CustomPrelude
forall a. Maybe a
Nothing
, cExtensions :: [Text]
cExtensions = []
, cGhcOptions :: [Text]
cGhcOptions = []
, cGitignore :: [Text]
cGitignore = []
, cNoUpload :: Any
cNoUpload = Bool -> Any
Any Bool
False
, cFiles :: Map FilePath Source
cFiles = Map FilePath Source
forall a. Monoid a => a
mempty
}
configCodec :: TomlCodec PartialConfig
configCodec :: TomlCodec PartialConfig
configCodec = Last Text
-> Last Text
-> Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig
forall (p :: Phase).
(p :- Text)
-> (p :- Text)
-> (p :- Text)
-> (p :- LicenseName)
-> (p :- [GhcVer])
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> ConfigP p
ConfigP
(Last Text
-> Last Text
-> Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last Text)
-> Codec
PartialConfig
(Last Text
-> Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Key -> TomlCodec Text) -> Key -> TomlCodec (Last Text)
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec Text
Toml.text "owner" TomlCodec (Last Text)
-> (PartialConfig -> Last Text) -> Codec PartialConfig (Last Text)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last Text
forall (p :: Phase). ConfigP p -> p :- Text
cOwner
Codec
PartialConfig
(Last Text
-> Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last Text)
-> Codec
PartialConfig
(Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Key -> TomlCodec Text) -> Key -> TomlCodec (Last Text)
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec Text
Toml.text "fullName" TomlCodec (Last Text)
-> (PartialConfig -> Last Text) -> Codec PartialConfig (Last Text)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last Text
forall (p :: Phase). ConfigP p -> p :- Text
cFullName
Codec
PartialConfig
(Last Text
-> Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last Text)
-> Codec
PartialConfig
(Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Key -> TomlCodec Text) -> Key -> TomlCodec (Last Text)
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec Text
Toml.text "email" TomlCodec (Last Text)
-> (PartialConfig -> Last Text) -> Codec PartialConfig (Last Text)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last Text
forall (p :: Phase). ConfigP p -> p :- Text
cEmail
Codec
PartialConfig
(Last LicenseName
-> Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last LicenseName)
-> Codec
PartialConfig
(Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Key -> TomlCodec LicenseName)
-> Key -> TomlCodec (Last LicenseName)
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec LicenseName
license "license" TomlCodec (Last LicenseName)
-> (PartialConfig -> Last LicenseName)
-> Codec PartialConfig (Last LicenseName)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last LicenseName
forall (p :: Phase). ConfigP p -> p :- LicenseName
cLicense
Codec
PartialConfig
(Last [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last [GhcVer])
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Key -> TomlCodec [GhcVer]) -> Key -> TomlCodec (Last [GhcVer])
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec [GhcVer]
ghcVerArr "ghcVersions" TomlCodec (Last [GhcVer])
-> (PartialConfig -> Last [GhcVer])
-> Codec PartialConfig (Last [GhcVer])
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last [GhcVer]
forall (p :: Phase). ConfigP p -> p :- [GhcVer]
cGhcVer
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "cabal" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cCabal
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "stack" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cStack
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "github" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cGitHub
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "githubActions" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cGhActions
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "travis" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cTravis
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "appveyor" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cAppVey
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "private" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cPrivate
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "lib" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cLib
Codec
PartialConfig
(Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "exe" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cExe
Codec
PartialConfig
(Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "test" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cTest
Codec
PartialConfig
(Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig Decision
-> Codec
PartialConfig
(Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Decision
decision "bench" TomlCodec Decision
-> (PartialConfig -> Decision) -> Codec PartialConfig Decision
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Decision
forall (p :: Phase). ConfigP p -> Decision
cBench
Codec
PartialConfig
(Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> PartialConfig)
-> Codec PartialConfig (Last CustomPrelude)
-> Codec
PartialConfig
([Text]
-> [Text] -> [Text] -> Any -> Map FilePath Source -> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Key -> TomlCodec CustomPrelude)
-> Key -> TomlCodec (Last CustomPrelude)
forall a. (Key -> TomlCodec a) -> Key -> TomlCodec (Last a)
Toml.last Key -> TomlCodec CustomPrelude
preludeT "prelude" TomlCodec (Last CustomPrelude)
-> (PartialConfig -> Last CustomPrelude)
-> Codec PartialConfig (Last CustomPrelude)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Last CustomPrelude
forall (p :: Phase). ConfigP p -> Last CustomPrelude
cPrelude
Codec
PartialConfig
([Text]
-> [Text] -> [Text] -> Any -> Map FilePath Source -> PartialConfig)
-> Codec PartialConfig [Text]
-> Codec
PartialConfig
([Text] -> [Text] -> Any -> Map FilePath Source -> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec [Text]
textArr "extensions" TomlCodec [Text]
-> (PartialConfig -> [Text]) -> Codec PartialConfig [Text]
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> [Text]
forall (p :: Phase). ConfigP p -> [Text]
cExtensions
Codec
PartialConfig
([Text] -> [Text] -> Any -> Map FilePath Source -> PartialConfig)
-> Codec PartialConfig [Text]
-> Codec
PartialConfig
([Text] -> Any -> Map FilePath Source -> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec [Text]
textArr "ghc-options" TomlCodec [Text]
-> (PartialConfig -> [Text]) -> Codec PartialConfig [Text]
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> [Text]
forall (p :: Phase). ConfigP p -> [Text]
cGhcOptions
Codec
PartialConfig
([Text] -> Any -> Map FilePath Source -> PartialConfig)
-> Codec PartialConfig [Text]
-> Codec
PartialConfig (Any -> Map FilePath Source -> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec [Text]
textArr "gitignore" TomlCodec [Text]
-> (PartialConfig -> [Text]) -> Codec PartialConfig [Text]
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> [Text]
forall (p :: Phase). ConfigP p -> [Text]
cGitignore
Codec PartialConfig (Any -> Map FilePath Source -> PartialConfig)
-> Codec PartialConfig Any
-> Codec PartialConfig (Map FilePath Source -> PartialConfig)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec Any
Toml.any "noUpload" TomlCodec Any -> (PartialConfig -> Any) -> Codec PartialConfig Any
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Any
forall (p :: Phase). ConfigP p -> Any
cNoUpload
Codec PartialConfig (Map FilePath Source -> PartialConfig)
-> Codec PartialConfig (Map FilePath Source)
-> TomlCodec PartialConfig
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Key -> TomlCodec (Map FilePath Source)
filesCodec "files" TomlCodec (Map FilePath Source)
-> (PartialConfig -> Map FilePath Source)
-> Codec PartialConfig (Map FilePath Source)
forall field a object.
Codec field a -> (object -> field) -> Codec object a
.= PartialConfig -> Map FilePath Source
forall (p :: Phase). ConfigP p -> Map FilePath Source
cFiles
where
_GhcVer :: TomlBiMap GhcVer Toml.AnyValue
_GhcVer :: TomlBiMap GhcVer AnyValue
_GhcVer = (GhcVer -> Text)
-> (Text -> Either Text GhcVer) -> TomlBiMap GhcVer AnyValue
forall a.
(a -> Text) -> (Text -> Either Text a) -> TomlBiMap a AnyValue
Toml._TextBy GhcVer -> Text
showGhcVer (Text -> Maybe GhcVer -> Either Text GhcVer
forall l r. l -> Maybe r -> Either l r
maybeToRight "Wrong GHC version" (Maybe GhcVer -> Either Text GhcVer)
-> (Text -> Maybe GhcVer) -> Text -> Either Text GhcVer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe GhcVer
parseGhcVer)
ghcVerArr :: Key -> TomlCodec [GhcVer]
ghcVerArr :: Key -> TomlCodec [GhcVer]
ghcVerArr = TomlBiMap GhcVer AnyValue -> Key -> TomlCodec [GhcVer]
forall a. TomlBiMap a AnyValue -> Key -> TomlCodec [a]
Toml.arrayOf TomlBiMap GhcVer AnyValue
_GhcVer
license :: Key -> TomlCodec LicenseName
license :: Key -> TomlCodec LicenseName
license = (LicenseName -> Text)
-> (Text -> Either Text LicenseName)
-> Key
-> TomlCodec LicenseName
forall a.
(a -> Text) -> (Text -> Either Text a) -> Key -> TomlCodec a
Toml.textBy LicenseName -> Text
forall b a. (Show a, IsString b) => a -> b
show (Text -> Maybe LicenseName -> Either Text LicenseName
forall l r. l -> Maybe r -> Either l r
maybeToRight "Wrong license" (Maybe LicenseName -> Either Text LicenseName)
-> (Text -> Maybe LicenseName) -> Text -> Either Text LicenseName
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Maybe LicenseName
parseLicenseName)
textArr :: Key -> TomlCodec [Text]
textArr :: Key -> TomlCodec [Text]
textArr = ([Text] -> Maybe [Text])
-> (Maybe [Text] -> [Text])
-> TomlCodec (Maybe [Text])
-> TomlCodec [Text]
forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
Toml.dimap [Text] -> Maybe [Text]
forall a. a -> Maybe a
Just Maybe [Text] -> [Text]
forall m. Monoid m => Maybe m -> m
maybeToMonoid (TomlCodec (Maybe [Text]) -> TomlCodec [Text])
-> (Key -> TomlCodec (Maybe [Text])) -> Key -> TomlCodec [Text]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TomlCodec [Text] -> TomlCodec (Maybe [Text])
forall a. TomlCodec a -> TomlCodec (Maybe a)
Toml.dioptional (TomlCodec [Text] -> TomlCodec (Maybe [Text]))
-> (Key -> TomlCodec [Text]) -> Key -> TomlCodec (Maybe [Text])
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TomlBiMap Text AnyValue -> Key -> TomlCodec [Text]
forall a. TomlBiMap a AnyValue -> Key -> TomlCodec [a]
Toml.arrayOf TomlBiMap Text AnyValue
Toml._Text
decision :: Key -> TomlCodec Decision
decision :: Key -> TomlCodec Decision
decision = (Decision -> Maybe Bool)
-> (Maybe Bool -> Decision)
-> TomlCodec (Maybe Bool)
-> TomlCodec Decision
forall b a. (b -> a) -> (a -> b) -> TomlCodec a -> TomlCodec b
Toml.dimap Decision -> Maybe Bool
fromDecision Maybe Bool -> Decision
toDecision (TomlCodec (Maybe Bool) -> TomlCodec Decision)
-> (Key -> TomlCodec (Maybe Bool)) -> Key -> TomlCodec Decision
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TomlCodec Bool -> TomlCodec (Maybe Bool)
forall a. TomlCodec a -> TomlCodec (Maybe a)
Toml.dioptional (TomlCodec Bool -> TomlCodec (Maybe Bool))
-> (Key -> TomlCodec Bool) -> Key -> TomlCodec (Maybe Bool)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Key -> TomlCodec Bool
Toml.bool
decisionMaybe :: [(Decision, Maybe Bool)]
decisionMaybe :: [(Decision, Maybe Bool)]
decisionMaybe = [ (Decision
Idk, Maybe Bool
forall a. Maybe a
Nothing)
, (Decision
Yes, Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
True)
, (Decision
Nop, Bool -> Maybe Bool
forall a. a -> Maybe a
Just Bool
False)
]
fromDecision :: Decision -> Maybe Bool
fromDecision :: Decision -> Maybe Bool
fromDecision d :: Decision
d = Maybe (Maybe Bool) -> Maybe Bool
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (Maybe (Maybe Bool) -> Maybe Bool)
-> Maybe (Maybe Bool) -> Maybe Bool
forall a b. (a -> b) -> a -> b
$ Decision -> [(Decision, Maybe Bool)] -> Maybe (Maybe Bool)
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Decision
d [(Decision, Maybe Bool)]
decisionMaybe
toDecision :: Maybe Bool -> Decision
toDecision :: Maybe Bool -> Decision
toDecision m :: Maybe Bool
m = Decision -> Maybe Decision -> Decision
forall a. a -> Maybe a -> a
fromMaybe (Text -> Decision
forall a t. (HasCallStack, IsText t) => t -> a
error "Impossible") (Maybe Decision -> Decision) -> Maybe Decision -> Decision
forall a b. (a -> b) -> a -> b
$ Maybe Bool -> [(Maybe Bool, Decision)] -> Maybe Decision
forall a b. Eq a => a -> [(a, b)] -> Maybe b
lookup Maybe Bool
m ([(Maybe Bool, Decision)] -> Maybe Decision)
-> [(Maybe Bool, Decision)] -> Maybe Decision
forall a b. (a -> b) -> a -> b
$ ((Decision, Maybe Bool) -> (Maybe Bool, Decision))
-> [(Decision, Maybe Bool)] -> [(Maybe Bool, Decision)]
forall a b. (a -> b) -> [a] -> [b]
map (Decision, Maybe Bool) -> (Maybe Bool, Decision)
forall a b. (a, b) -> (b, a)
swap [(Decision, Maybe Bool)]
decisionMaybe
preludeT :: Key -> TomlCodec CustomPrelude
preludeT :: Key -> TomlCodec CustomPrelude
preludeT = TomlCodec CustomPrelude -> Key -> TomlCodec CustomPrelude
forall a. TomlCodec a -> Key -> TomlCodec a
Toml.table TomlCodec CustomPrelude
customPreludeT
filesCodec :: Key -> TomlCodec (Map FilePath Source)
filesCodec :: Key -> TomlCodec (Map FilePath Source)
filesCodec = TomlCodec FilePath
-> TomlCodec Source -> Key -> TomlCodec (Map FilePath Source)
forall k v.
Ord k =>
TomlCodec k -> TomlCodec v -> Key -> TomlCodec (Map k v)
Toml.map (Key -> TomlCodec FilePath
Toml.string "path") TomlCodec Source
sourceCodec
guessConfigFromGit :: IO PartialConfig
guessConfigFromGit :: IO PartialConfig
guessConfigFromGit = do
Maybe Text
gitOwner <- (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> IO Text -> IO (Maybe Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> "git" FilePath -> [Text] -> IO Text
$| ["config", "user.login"]) IO (Maybe Text) -> IO (Maybe Text) -> IO (Maybe Text)
forall a. IO a -> IO a -> IO a
$? Maybe Text -> IO (Maybe Text)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Text
forall a. Maybe a
Nothing
Maybe Text
gitName <- (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> IO Text -> IO (Maybe Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> "git" FilePath -> [Text] -> IO Text
$| ["config", "user.name"]) IO (Maybe Text) -> IO (Maybe Text) -> IO (Maybe Text)
forall a. IO a -> IO a -> IO a
$? Maybe Text -> IO (Maybe Text)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Text
forall a. Maybe a
Nothing
Maybe Text
gitEmail <- (Text -> Maybe Text
forall a. a -> Maybe a
Just (Text -> Maybe Text) -> IO Text -> IO (Maybe Text)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> "git" FilePath -> [Text] -> IO Text
$| ["config", "user.email"]) IO (Maybe Text) -> IO (Maybe Text) -> IO (Maybe Text)
forall a. IO a -> IO a -> IO a
$? Maybe Text -> IO (Maybe Text)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Text
forall a. Maybe a
Nothing
PartialConfig -> IO PartialConfig
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PartialConfig -> IO PartialConfig)
-> PartialConfig -> IO PartialConfig
forall a b. (a -> b) -> a -> b
$ PartialConfig
defaultConfig
{ cOwner :: 'Partial :- Text
cOwner = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last Maybe Text
gitOwner
, cFullName :: 'Partial :- Text
cFullName = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last Maybe Text
gitName
, cEmail :: 'Partial :- Text
cEmail = Maybe Text -> Last Text
forall a. Maybe a -> Last a
Last Maybe Text
gitEmail
}
finalise :: PartialConfig -> Validation [Text] Config
finalise :: PartialConfig -> Validation [Text] Config
finalise ConfigP{..} = Text
-> Text
-> Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config
forall (p :: Phase).
(p :- Text)
-> (p :- Text)
-> (p :- Text)
-> (p :- LicenseName)
-> (p :- [GhcVer])
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> ConfigP p
ConfigP
(Text
-> Text
-> Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Text
-> Validation
[Text]
(Text
-> Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text -> Last Text -> Validation [Text] Text
forall a. Text -> Last a -> Validation [Text] a
fin "owner" Last Text
'Partial :- Text
cOwner
Validation
[Text]
(Text
-> Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Text
-> Validation
[Text]
(Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Last Text -> Validation [Text] Text
forall a. Text -> Last a -> Validation [Text] a
fin "fullName" Last Text
'Partial :- Text
cFullName
Validation
[Text]
(Text
-> LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Text
-> Validation
[Text]
(LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Last Text -> Validation [Text] Text
forall a. Text -> Last a -> Validation [Text] a
fin "email" Last Text
'Partial :- Text
cEmail
Validation
[Text]
(LicenseName
-> [GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] LicenseName
-> Validation
[Text]
([GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Last LicenseName -> Validation [Text] LicenseName
forall a. Text -> Last a -> Validation [Text] a
fin "license" Last LicenseName
'Partial :- LicenseName
cLicense
Validation
[Text]
([GhcVer]
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] [GhcVer]
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Text -> Last [GhcVer] -> Validation [Text] [GhcVer]
forall a. Text -> Last a -> Validation [Text] a
fin "ghcVersions" Last [GhcVer]
'Partial :- [GhcVer]
cGhcVer
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cCabal
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cStack
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cGitHub
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cGhActions
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cTravis
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cAppVey
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cPrivate
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cLib
Validation
[Text]
(Decision
-> Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cExe
Validation
[Text]
(Decision
-> Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cTest
Validation
[Text]
(Decision
-> Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] Decision
-> Validation
[Text]
(Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Decision -> Validation [Text] Decision
forall (f :: * -> *) a. Applicative f => a -> f a
pure Decision
cBench
Validation
[Text]
(Last CustomPrelude
-> [Text]
-> [Text]
-> [Text]
-> Any
-> Map FilePath Source
-> Config)
-> Validation [Text] (Last CustomPrelude)
-> Validation
[Text]
([Text]
-> [Text] -> [Text] -> Any -> Map FilePath Source -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Last CustomPrelude -> Validation [Text] (Last CustomPrelude)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Last CustomPrelude
cPrelude
Validation
[Text]
([Text]
-> [Text] -> [Text] -> Any -> Map FilePath Source -> Config)
-> Validation [Text] [Text]
-> Validation
[Text] ([Text] -> [Text] -> Any -> Map FilePath Source -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Text] -> Validation [Text] [Text]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
cExtensions
Validation
[Text] ([Text] -> [Text] -> Any -> Map FilePath Source -> Config)
-> Validation [Text] [Text]
-> Validation
[Text] ([Text] -> Any -> Map FilePath Source -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Text] -> Validation [Text] [Text]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
cGhcOptions
Validation [Text] ([Text] -> Any -> Map FilePath Source -> Config)
-> Validation [Text] [Text]
-> Validation [Text] (Any -> Map FilePath Source -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Text] -> Validation [Text] [Text]
forall (f :: * -> *) a. Applicative f => a -> f a
pure [Text]
cGitignore
Validation [Text] (Any -> Map FilePath Source -> Config)
-> Validation [Text] Any
-> Validation [Text] (Map FilePath Source -> Config)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Any -> Validation [Text] Any
forall (f :: * -> *) a. Applicative f => a -> f a
pure Any
cNoUpload
Validation [Text] (Map FilePath Source -> Config)
-> Validation [Text] (Map FilePath Source)
-> Validation [Text] Config
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Map FilePath Source -> Validation [Text] (Map FilePath Source)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map FilePath Source
cFiles
where
fin :: Text -> Last a -> Validation [Text] a
fin :: Text -> Last a -> Validation [Text] a
fin name :: Text
name = Validation [Text] a
-> (a -> Validation [Text] a) -> Maybe a -> Validation [Text] a
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Text] -> Validation [Text] a
forall e a. e -> Validation e a
Failure ["Missing field: " Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
name]) a -> Validation [Text] a
forall e a. a -> Validation e a
Success (Maybe a -> Validation [Text] a)
-> (Last a -> Maybe a) -> Last a -> Validation [Text] a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Last a -> Maybe a
forall a. Last a -> Maybe a
getLast
loadFileConfig :: MonadIO m => FilePath -> m PartialConfig
loadFileConfig :: FilePath -> m PartialConfig
loadFileConfig = TomlCodec PartialConfig -> FilePath -> m PartialConfig
forall a (m :: * -> *). MonadIO m => TomlCodec a -> FilePath -> m a
Toml.decodeFile TomlCodec PartialConfig
configCodec