!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  NoneOInclude this function when your setup doesn't contain any extra functionality.Modifies the given record of hooks by adding functionality that creates a package info module for each component of the cabal package.4This function is intended for usage in more complex Setup.hsU scripts. If your setup doesn't contain any other function you can just import the  function from this module.The modules are created in the autogen! build directory where also the Path_Q module is created by cabal's simple build setup. This is usually the directory ./dist/build/autogen.1For a library component the module is named just PkgInfo0. For all other components the module is named PkgInfo_COMPONENT_NAME where COMPONENT_NAME# is the name of the component with - characters replaced by _.5Internal utilities of the configuration-tools package&Copyright 2014-2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone39HMKThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.KThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.KThis is the same type as the type from the lens library with the same name.ZIn case it is already import from the lens package this should be hidden from the import.      )Copyright 2014 AlephCloud Systems, Inc.MIT Lars Kuhtz <lars@alephcloud.com> experimentalNone39HMT 'A validation function. The type in the  is excpected to be a Foldable# structure for collecting warnings..Validates that a value is an HTTP or HTTPS URL%Validates that a value is an HTTP URL&Validates that a value is an HTTPS URL>Validates that a value is an URI without a fragment identifierGValidates that a value is an absolute URI without a fragment identifierOValidates that a value is an absolute URI with an optional fragment identifier$WValidates if the given executable name can be found in the system and can be executed.%(Validate that the input is a config file$=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message=configuration property name that is used in the error message#exact length of the validated value=configuration property name that is used in the error message%maximum length of the validated value=configuration property name that is used in the error message%minimum length of the validated value=configuration property name that is used in the error message%minimum length of the validated value%maximum length of the validated value=configuration property name that is used in the error message =configuration property name that is used in the error message!=configuration property name that is used in the error message"=configuration property name that is used in the error message=configuration property name that is used in the error message#=configuration property name that is used in the error message$=configuration property name that is used in the error message%&=configuration property name that is used in the error message'=configuration property name that is used in the error message(=configuration property name that is used in the error messageexpected value)=configuration property name that is used in the error message*=configuration property name that is used in the error message+=configuration property name that is used in the error message,=configuration property name that is used in the error message-=configuration property name that is used in the error message.=configuration property name that is used in the error message0a strict upper bound for the configuration value/=configuration property name that is used in the error message)a upper bound for the configuration value0=configuration property name that is used in the error message0a strict lower bound for the configuration value1=configuration property name that is used in the error message)a lower bound for the configuration value2=configuration property name that is used in the error message+the valid range for the configuration value# !"#$%&'()*+,-./012# !"$#%&'()*+,-./012$ !"#$%&'()*+,-./012 Configuration of Optional Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone2349MT3Command line parser for record  valuesExample: edata Setting = Setting { _setA "7 !Int , _setB "7 !String } deriving (Show, Read, Eq, Ord, Typeable) $(makeLenses ''Setting) defaultSetting "7 Setting defaultSetting = Setting { _setA = 0 , _setB = 1 } instance ToJSON Setting where toJSON setting = object [ "a" .= _setA setting , "b" .= _setB setting ] instance FromJSON (Setting ! Setting) where parseJSON = withObject "Setting" $ \o ! id <$< setA ..: "a" % o <*< setB ..: "b" % o instance FromJSON Setting where parseJSON v = parseJSON v <*> pure defaultSetting pSetting "7 MParser Setting pSetting = id <$< setA .:: option auto % short 'a' <> metavar "INT" <> help "set a" <*< setB .:: option auto % short 'b' <> metavar "INT" <> help "set b" -- | Use 'Setting' as 'Maybe' in a configuration: -- data Config = Config { _maybeSetting "7 !(Maybe Setting) } deriving (Show, Read, Eq, Ord, Typeable) $(makeLenses ''Config) defaultConfig "7 Config defaultConfig = Config { _maybeSetting = defaultSetting } instance ToJSON Config where toJSON config = object [ "setting" .= maybeSetting ] instance FromJSON (Config ! Config) where parseJSON = withObject "Config" $ \o ! id <$< maybeSetting %.: "setting" % o pConfig "7 MParser Config pConfig = id <$< maybeSetting %:: (maybeOption defaultSetting <$> pEnableSetting <*> pSetting) where pEnableSetting = boolOption % long "setting-enable" <> value False <> help "Enable configuration flags for setting"34default value that is used if base configuration is Iwhether to enable this parser or not (usually is a boolean option parser):update function (usually given as applicative 'MParser a')Uthe base value that is updated (usually the result of parsing the configuration file)333AUseful operators for defining functions in an applicative context!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimental Safe-Inferred9MT4$This operator is an alternative for x with a higher precedence. It is suitable for usage within applicative style code without the need to add parenthesis.5$This operator is a UTF-8 version of 4 which is an alternative for x with a higher precedence. It is suitable for usage within applicative style code without the need to add parenthesis.1The hex value of the UTF-8 character is 0x00d7. In VIM type:  Ctrl-V u 00d7nYou may also define a key binding by adding something like the following line to your vim configuration file: iabbrev <buffer> >< 60Functional composition for applicative functors.7LFunctional composition for applicative functors with its arguments flipped.8XApplicative functional composition between a pure function and an applicative function.9sApplicative functional composition between a pure function and an applicative function with its arguments flipped.:0Functional composition for applicative functors.This is a rather popular operator. Due to conflicts (for instance with the lens package) it may have to be imported qualified.;iFor people who like nicely aligned code and do not mind messing with editor key-maps: here a version of : that uses a unicode symbol1The hex value of the UTF-8 character " is 0x2299.A convenient VIM key-map is: iabbrev <buffer> ../ "456789:;456789:;456789:;456789:;456789:;/Command Line Option Parsing with Default Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone9HMT<:Type of option parsers that yield a modification function.=JAn operator for applying a setter to an option parser that yields a value.Example usage: "data Auth = Auth { _user "7 !String , _pwd "7 !String } user "7 Functor  ! (String !  String) ! Auth !  Auth user f s = (\u ! s { _user = u }) <$> f (_user s) pwd "7 Functor  ! (String !  String) ! Auth !  Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) pAuth "7 MParser Auth pAuth = id <$< user .:: strOption long "user" " short 'u' " help "user name" <*< pwd .:: strOption long "pwd" " help "password for user">[An operator for applying a setter to an option parser that yields a modification function.Example usage: data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor  ! (Auth !  Auth) ! HttpURL !  HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor  ! (String !  String) ! HttpURL !  HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor  ! (String !  String) ! HttpURL !  HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) pHttpURL "7 MParser HttpURL pHttpURL = id <$< auth %:: pAuth <*< domain .:: strOption long "domain" " short 'd' " help "HTTP domain"@The @ is an alternative to .Using q with command line parsers that overwrite settings from a configuration file is problematic: the absence of the B is interpreted as setting the respective configuration value to . So there is no way to specify on the command line that the value from the configuration file shall be used. Some command line UIs use two different options for those values, for instance --enable-feature and --disable-feature]. This option instead expects a Boolean value. Beside that it behaves like any other option.AAn alternative syntax for @ for options with long names.Instead of taking a boolean argument the presence of the option acts as a switch to set the respective configuration setting to >. If the option is not present the setting is left unchanged./In addition for long option names a respective  unset flag' is provided. For instance for a flag  --verbose there will also be a flag  --no-verbose.<This can still be used with short option names only, but no  unset flag would be provided.BMAn option parser for flags that are enabled via the flag name prefixed with  --enable-' and disabled via the flag name prefix  --disable-. The prefixes are applied to all long option names. Short option names are parsed unchanged and and cause the flag to be enabled.HThis resembles the style of flags that is used for instances with Cabal. <=>?@ABCD      !"#$%&'()*+,-./0123456<=>?@ABCD <=>?@ABCD <=>?@ABCD=>Configuration of Monoids!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone249BMTExUpdate a value by appending on the right. Under normal circumstances you'll never use this type directly but only its 7 instance. See the G for an example.FwUpdate a value by appending on the left. Under normal circumstances you'll never use this type directly but only its 7 instance. See the G for an example.G(Update a value by appending on the left. #newtype RoutingTable = RoutingTable { _routingTableMap "7 HashMap T.Text T.Text } $(makeLenses ''RoutingTable) instance FromJSON (RoutingTable ! RoutingTable) where parseJSON = withObject "RoutingTable" $ \o ! id <$< routingTableMap . from leftMonoidalUpdate %.: "route_map" % oHThis is the same as from leftMonoidalUpdate) but doesn't depend on the lens Library.I(Update a value by appending on the left. newtype RoutingTable = RoutingTable { _routingTableMap "7 HashMap T.Text T.Text } $(makeLenses ''RoutingTable) pRoutingTable "7 MParser RoutingTable pRoutingTable = routingTableMap %:: pLeftMonoidalUpdate pRoute where pRoute = option (eitherReader readRoute) % long "route" <> help "add a route to the routing table; the APIROUTE part must not contain a colon character" <> metavar "APIROUTE:APIURL" readRoute s = case break (== ':') s of (a,':':b) ! fmapL T.unpack $ do validateNonEmpty "APIROUTE" a validateHttpOrHttpsUrl "APIURL" b return $ HM.singleton (T.pack a) (T.pack b) _ ! Left "missing colon between APIROUTE and APIURL" fmapL f = either (Left . f) RightJ.Update a value by appending on the right. See G for an usage example.KThis is the same as from rightMonoidalUpdate) but doesn't depend on the lens Library.L.Update a value by appending on the right. See I for an usage example.E89F:;GHIJKL<=EFGHIJKLFGHIEJKL E89F:;GHIJKL<=#HTTPS certificate validation policy!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone+9MTM The Haskell tlsR library provides only limited means for providing user friendly error messages. In particular we'd like to provide the user with fingerprints of the reject certificate for self-signed certificates. Also we want to provide the user with some guidance what a particular failure may indicate with respect to security of the connection.Here we employ a hackY for better error handling: Based on the assumption that we initialize a new connection Manager and also a new certificate cache for each request, we write the certificate that is received from the server in the TLS handshake to an >z. If the handshakes fails later on because the certificate is rejected we can recover the rejected certificate from the >.What we really want are exceptions that can be consumed programatically. In particular exceptions should include rejected certificates.Qdisable certificate validationR2a whitelist for services with trusted certificatesW@Make an HTTP request with a given certificate validation policy.:NOTE that the HTTP request is strictly loaded into memory.NOTE that this implementation opens a new TCP connection for each single request. HTTPS certificates validation results are not cached between different requests.?The usage of the certVar parameter is not thread-safe!VFIXME We could make this thread-safe by using a cache for "unvalidated" certificates.MNOPQRSTUV#prefix for the command line optionsWHTTP or HTTPS URL@?AB MNOPQRSTUVW OPQRSTUVWMN MNOPQRSTUVW@?AB 2Parsing of Configuration Files with Default Values!Copyright 2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone &+39HMTXAn internalc type for the meta configuration that specifies how the configuration files are loaded and parsed._A JSON C# parser for a property of a given D- that updates a setter with the parsed value. data Auth = Auth { _userId "7 !Int , _pwd "7 !String } userId "7 Functor  ! (Int !  Int) ! Auth !  Auth userId f s = (\u ! s { _userId = u }) <$> f (_userId s) pwd "7 Functor  ! (String !  String) ! Auth !  Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) instance FromJSON (Auth ! Auth) where parseJSON = withObject "Auth" $ \o ! id <$< setProperty user "user" p o <*< setProperty pwd "pwd" parseJSON o where p = withText "user" $ \case "alice" ! pure (0 "7 Int) "bob" ! pure 1 e ! fail $ "unrecognized user " " e`A variant of the _ that uses the default E method from the 7a instance to parse the value of the property. Its usage pattern mimics the usage pattern of the F! operator from the aeson library. data Auth = Auth { _user "7 !String , _pwd "7 !String } user "7 Functor  ! (String !  String) ! Auth !  Auth user f s = (\u ! s { _user = u }) <$> f (_user s) pwd "7 Functor  ! (String !  String) ! Auth !  Auth pwd f s = (\p ! s { _pwd = p }) <$> f (_pwd s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''Auth) instance FromJSON (Auth ! Auth) where parseJSON = withObject "Auth" $ \o ! id <$< user ..: "user" o <*< pwd ..: "pwd" oaBA JSON parser for a function that modifies a property of a given D0 and updates a setter with the parsed function. data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor  ! (Auth !  Auth) ! HttpURL !  HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor  ! (String !  String) ! HttpURL !  HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor  ! (String !  String) ! HttpURL !  HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) instance FromJSON (HttpURL ! HttpURL) where parseJSON = withObject "HttpURL" $ \o ! id <$< auth %.: "auth" o <*< domain ..: "domain" ob A variant of a that used the 7A instance for the update function. It mimics the aeson operator FE. It creates a parser that modifies a setter with a parsed function. data HttpURL = HttpURL { _auth "7 !Auth , _domain "7 !String } auth "7 Functor  ! (Auth !  Auth) ! HttpURL !  HttpURL auth f s = (\u ! s { _auth = u }) <$> f (_auth s) domain "7 Functor  ! (String !  String) ! HttpURL !  HttpURL domain f s = (\u ! s { _domain = u }) <$> f (_domain s) path "7 Functor  ! (String !  String) ! HttpURL !  HttpURL path f s = (\u ! s { _path = u }) <$> f (_path s) -- or with lenses and TemplateHaskell just: -- $(makeLenses ''HttpURL) instance FromJSON (HttpURL ! HttpURL) where parseJSON = withObject "HttpURL" $ \o ! id <$< auth %.: "auth" o <*< domain ..: "domain" ocThis operator requires that a value is explicitly provided in a configuration file, thus preventing the default value from being used. Otherwise this operator does the same as '(..:)'.GXYZ[\]^_4a lens into the target that is updated by the parserthe JSON property name the JSON C7 parser that is used to parse the value of the propertythe parsed JSON C D`abcdefgdefault configuration value list of configuration file pathsH file pathI file pathJKURLhALMNOPQRSTUVWXFYZ[\]^_`abcdefghE7ijklDmnopqrsCtuvXYZ[\]^_`abcdefgh_`cab[]\^^XYZdefhgGXYZ[]\^^_`abcdefgHIJKh`b "Utilities for Configuring Programs&Copyright 2014-2015 PivotCloud, Inc.MIT!Lars Kuhtz <lkuhtz@pivotmail.com> experimentalNone +39HMi3Information about the cabal package. The format is: C(info message, detailed info message, version string, license text)See the documentation of Configuration.Utils.Setupr for a way how to generate this information automatically from the package description during the build process.wAn internalw data type that is used during configuration parsing to represent the overall application configuration which includes the user\ configuration, which is actual configuration value that is given to the application andthe metaI configuration, which are all settings that determine how the actual user$ configuration is loaded and parsed. NOTE that metak configuration settings can only be provided via command line options but not through configuration files.xProgram Descriptiony Help headerz Help footer{ options parser for configuration|default configuration}a validation function. The ~ result is interpreted as a  structure of warnings.fa list of configuration files that are loaded in order before any command line argument is evaluated.l[A newtype wrapper around a validation function. The only purpose of this type is to avoid ImpredicativeTypes# when storing the function in the j record.oProgram Descriptionp Help headerq Help footerr Options parser for configurationsDefault configurationtValidation FunctionThe ~ result is interpreted as a  structure of warnings.u\Configuration files that are loaded in order before any command line argument is evaluated.v& for simultaneous query and update of r and s&. This supports to change the type of k with  and .wSmart constructor for k.p and q are set to . The function t is set to const (return [])xSmart constructor for k.p and q are set to ._A flag that indicates that the application should output the effective configuration and exit.The XW collects all parameters that determine how configuration files are loaded and parsed.A list of configuration file locations. Configuration file locations are set either statically in the code or are provided dynamically on the command line via  --config-file options.The user configuration. During parsing this is represented as an update function that yields a configuration value when applied to a default value.This function parsers all command line options: X? options that determine how configuration files are loaded. ConfigFiles options are all  --config-file options.Other meta options, such as --print-config.Options for the actual user  configuration. The user configuration is represented as an update function that yields a configuration value when applied to an default value.yRun an IO action with a configuration that is obtained by updating the given default configuration the values defined via command line arguments.eIn addition to the options defined by the given options parser the following options are recognized: --config-file, -cKParse the given file path as a (partial) configuration in YAML format.--print-config, -p>Print the final parsed configuration to standard out and exit. --help, -hPrint a help message and exit.)As long as the package wasn't build with -f-remote-configsl the following two options are available. They affect how configuration files are loaded from remote URLs. "--config-https-insecure=true|falseMBypass certificate validation for all HTTPS connections to all services.3--config-https-allow-cert=HOSTNAME:PORT:FINGERPRINTIUnconditionally trust the certificate for connecting to the service.zRun an IO action with a configuration that is obtained by updating the given default configuration the values defined via command line arguments.eIn addition to the options defined by the given options parser the following options are recognized: --config-file, -cKParse the given file path as a (partial) configuration in YAML format.--print-config, -p>Print the final parsed configuration to standard out and exit. --help, -hPrint a help message and exit. --version, -v.Print the version of the application and exit. --info, -i8Print a short info message for the application and exit. --long-info;Print a detailed info message for the application and exit. --license:Print the text of the license of the application and exit.)As long as the package wasn't build with -f-remote-configsl the following two options are available. They affect how configuration files are loaded from remote URLs. "--config-https-insecure=true|falseMBypass certificate validation for all HTTPS connections to all services.3--config-https-allow-cert=HOSTNAME:PORT:FINGERPRINTIUnconditionally trust the certificate for connecting to the service.Internal main function{!Parse the command line arguments.IAny warnings from the configuration function are discarded. The options --print-config and --help are just ignored.xValidates a configuration value. Throws an user error if there is an error. If there are warnings they are printed to .*iwjxyz{|}klmnopqrstuvwprogram description-parser for updating the default configurationdefault configurationxyprogram info value; use w# to construct a value of this typeRcomputation that is given the configuration that is parsed from the command line.zprogram info value; use w# to construct a value of this typeRcomputation that is given the configuration that is parsed from the command line.:Program Info value which may include a validation function^Maybe a package info parser. This parser is run only for its side effects. It is supposed to  interceptM the parsing process and execute any implied action (showing help messages).program info value; use w# to construct a value of this typeRcomputation that is given the configuration that is parsed from the command line.{%program name (used in error messages)program info value; use w# to construct a value of this typecommand line argumentsLMNOPQRSTUVWXFYZ[\]^_`abcdefghE7ijklDmnopqrsCtuv      !"#$%&'()*+,-./01234563456789:;<=>?@ABCDEFGHIJKLXYZ[\]^_`abcdefhijklmnopqrstuvwxyz{kwopqrsuxyiz{jtlmnviwjxyz{|}klmnopqrstuvwxyz{ None 2349M}>We restrict services to use either HTTP or HTTPS but not both.bTLS can be turned off explicitely in the configuration file by setting the respective section to null. It can not be turned on or off via command line options. But once it is turned on the values for the certificate and key file can be changed by command line options.~MIn order to make TLS optional this type should be used wrapped into a Maybe.This option parser does not allow to enable or disable usage of TLS. The option will have effect only when TLS usage is configured in the configuration file or the default configuration.eFIXME: print a warning and exit when one of these options is provided even though TLS is turned off.3This is used as default when wrapped into Maybe and the parsed value is not s andthe given default is not .)|}~|}~~}||}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYYZZ[\]^_`a b b c d e f g h i j k l m n o p q r s t u u v w x y z { | } ~           !"#$%&%'%()*)+),)-).)/)0)1)2)3)4)5)6)7)8)9):):);)<)=)>)?)@)@)A)B)C)D)D)E)F)F)G)H)IJKLQMRNOPQRSTUJVWJVXJKYJZ[ \ ] ^ _ `JabJacJadJaeJafJagJahJaiJjkJjlJmnJZoJZpJZqJZrJZsJZtJZuJZvJZwJZxJKyJKzJK{JK|JK}JK~JKJKJVJVJVJVJVJVXJVJVJVJVJVJVJVJV                     t                   O  configuration-tools-0.2.9Configuration.Utils.SetupConfiguration.Utils.InternalConfiguration.Utils.ValidationConfiguration.Utils.MaybeConfiguration.Utils.OperatorsConfiguration.Utils.CommandLineConfiguration.Utils.Monoid#Configuration.Utils.HttpsCertPolicyConfiguration.Utils.ConfigFileConfiguration.UtilsConfiguration.Utils.HttpmainmkPkgInfoModulesIso'IsoLens'Lenslensoversetviewiso&sshowexceptTerrorTfmapLConfigValidationvalidateHttpOrHttpsUrlvalidateHttpUrlvalidateHttpsUrl validateUrivalidateAbsoluteUrivalidateAbsoluteUriFragment validateIPv4 validateIPv6 validatePortvalidateNonEmptyvalidateLengthvalidateMaxLengthvalidateMinLengthvalidateMinMaxLengthvalidateFilePath validateFilevalidateFileReadablevalidateFileWritablevalidateDirectoryvalidateExecutablevalidateConfigFile validateFalse validateTrue validateBoolvalidateNonNegativevalidatePositivevalidateNonPositivevalidateNegativevalidateNonNull validateLessvalidateLessEqvalidateGreatervalidateGreaterEq validateRange maybeOption%×<*<>*><$<>$><.>⊙MParser.::%:: boolReader boolOption boolOption_enableDisableFlag fileOption eitherReadPRightMonoidalUpdateLeftMonoidalUpdateleftMonoidalUpdatefromLeftMonoidalUpdatepLeftMonoidalUpdaterightMonoidalUpdatefromRightMonoidalUpdatepRightMonoidalUpdateVerboseTlsExceptionHttpsCertPolicy_certPolicyInsecure_certPolicyHostFingerprintscertPolicyInsecurecertPolicyHostFingerprintsdefaultHttpsCertPolicypHttpsCertPolicyhttpWithValidationPolicyConfigFilesConfig_cfcHttpsPolicy ConfigFileConfigFileOptionalConfigFileRequired getConfigFile setProperty..:updateProperty%.:!..:cfcHttpsPolicydefaultConfigFilesConfigpConfigFilesConfigparseConfigFiles dropAndUncamlPkgInfoProgramInfoValidate ProgramInfoConfigValidationFunctionrunConfigValidation piDescription piHelpHeader piHelpFooterpiOptionParserpiDefaultConfigurationpiValidateConfigurationpiConfigurationFiles%piOptionParserAndDefaultConfiguration programInfoprogramInfoValidaterunWithConfigurationrunWithPkgInfoConfigurationparseConfigurationHttpClientConfigurationHttpServiceConfigurationHttpServiceTLSConfiguration hstcCertFile hstcKeyFile"defaultHttpServiceTLSConfiguration#validateHttpServiceTLSConfigurationpHttpServiceTLSConfigurationhscHosthscPort hscUseTLSdefaultHttpServiceConfiguration validateHttpServiceConfigurationpHttpServiceConfigurationhccHosthccPort hccUseTLSdefaultHttpClientConfigurationvalidateHttpClientConfigurationpHttpClientConfigurationhttpService2clientConfigurationmkPkgInfoModulesPostConfpkgInfoModuleNamepkgInfoFileNametrimgetVCS flagNameStr pkgInfoModuleupdatePkgInfoModulelicenseFilesTexthgInfogitInfo noVcsInfopkgIdWithLicense mtl-2.2.1Control.Monad.Writer.Class MonadWritervalidateFileExecutablebase Data.MaybeMaybeNothing$fFromJSON(->)GHC.Base$optparse-applicative-0.11.0.1Options.Applicative.Builderswitchghc-prim GHC.TypesFalseTrueControl.Applicative<*>pure Alternative Applicative Data.Monoidmappendempty<**>optionalliftA3liftA2liftA<**>manysome<|>getConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList Data.Functor<$><><$Options.Applicative.Extra renderFailure parserFailureexecParserPurecustomExecParserMaybeexecParserMaybegetParseResulthandleParseResultcustomExecParser execParser hsubparserhelperidmprefscolumns noBacktrackshowHelpOnError disambiguate multiSuffixinfo noIntersperse failureCode progDescDocprogDesc footerDocfooter headerDocheader briefDescfullDescoption nullOption strOption infoOption abortOptionflag'flag strArgumentargument subparser completeraction completeWithcommandhiddenmetavar noArgError eitherReaderhelpDochelp showDefaultshowDefaultWithvaluelongshortdisabledstrautoInfoModPrefsMod$Options.Applicative.Builder.Internalinternal OptionFields FlagFields CommandFieldsArgumentFieldsModOptions.Applicative.Common treeMapParser mapParser evalParserrunParserFully runParserInfo runParserliftOpt optionNames showOption%Options.Applicative.Builder.Completer bashCompleter listCompleterlistIOCompleterOptions.Applicative.Types overFailure mkCompleter readerError readerAbortErrorMsgInfoMsg ShowHelpText UnknownError ParseErrorinfoIntersperseinfoFailureCode infoFooter infoHeader infoProgDesc infoFullDesc infoParser ParserInfo prefColumns prefBacktrackprefShowHelpOnErrorprefDisambiguateprefMultiSuffix ParserPrefsReadM CompleterexecCompletionCompletionResult execFailure ParserFailureFailureCompletionInvoked ParserResult aeson-0.8.0.2Data.Aeson.Types.ClassFromJSON_getRightMonoidalUpdate_getLeftMonoidalUpdate$fFromJSON(->)0 GHC.IORefIORef getSettingshandleTlsException$fExceptionVerboseTlsException$fShowVerboseTlsExceptionData.Aeson.Types.InternalValueObject parseJSONData.Aeson.Types.Instances.:ConfigFileParserreadConfigFile loadLocalisRemote loadRemote Data.AesoneitherDecodeStrict' eitherDecode'eitherDecodeStrict eitherDecode decodeStrict'decode' decodeStrictdecodeData.Aeson.Parser.Internaljson'jsonData.Aeson.Encode.ByteStringencode.!=.:?fromJSON.=withBoolwithScientific withNumber withArraywithText withObjectgenericParseJSON genericToJSONgToJSONGToJSON gParseJSON GFromJSONtoJSONToJSONobjectErrorSuccessResultArrayStringNumberBoolNullfromDotNetTime DotNetTimeAppConfiguration_piDescription _piHelpHeader _piHelpFooter_piOptionParser_piDefaultConfiguration_piValidateConfiguration Data.EitherRight Data.FoldableFoldable_piConfigurationFiles printConfigconfigFilesConfig configFiles mainConfigpAppConfiguration runInternalvalidateConfigGHC.IO.Handle.FDstderr _printConfig_configFilesConfig _configFiles _mainConfigpPkgInfo mainOptions%$fFromJSONHttpServiceTLSConfiguration_hccHost_hccPort _hccUseTLS_hscHost_hscPort _hscInterface _hscUseTLS _hstcCertFile _hstcKeyFile hscInterface$fToJSONHttpClientConfiguration $fToJSONHttpServiceConfiguration#$fToJSONHttpServiceTLSConfiguration$fFromJSON(->)1