úÎbX⎠     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­None !"&'()+3457>FIKLN% $Partials are constructed with every Ž. spelled out, resulting in deep skeletons of Žs.   replaces those with single Žs at their tops.BHelper class for disambiguating overlaps. The trick is that the  instance based on the : constraint is more general than all other instances, so OverlappingInstances< will ensure it is matched last. This way, no instance of + can wrongly overlap with any instance of . Compile-time ¯. Type-level ° / Ž (as produced by "2) are embedded in each constructor, resp.. Since ° and Ž are different types,  and  + can be distinguished by the type checker.!This is ą on ¯ lifted to the type level."Map  ConfgCode% types to the types of config values.FTransformers' Identity is not in ˛5, so we roll our own. It's also less work to write.HH is isomorphic to ¯, but is only used for S values.KMap  ConfgCode% types to the types of config values.M!Map user-provided config type to N types.U7Add descriptive text to record field for documentation.V%Construction of config record fields.W Construction of config records (cons for record fields).[­From a list of config file paths, construct a source list that (1) reads those files allowing for recursive includes; then (2) processes shell environment variables (with ŗD as prefix), and finally (3) processes command line args, turning --config4 arguments into further recursive config file loads.ZFile path arguments are optiona; config paths to non-existent files are silently dropped.\ZRequire that all shell env variables start with executable name. (This is just a call to requireShellEnvPrefix' with the result of progName.)]Handle `--config=<FILE>` , `--config  FILE `: split up >( source on each of these, and inject a C! source with the resp. file name.^ Require prefix for shell env variables. This function will chop off the given prefix of all env entries, and filter all entries that do not have this prefix.`See Data.Yaml.Include.b Very basic first approach: read --(key)(=|s+)(value)4; construct shell env from keys and names, and use '” on the command line. If it doesn't like the syntax used in the command line, it will crash. I hope for this to get much fancier in the future.hMap a ;” config value and a type-level path to the part of the config value the path points to. Trigger an informative type error if path does not exist.iThis is a version of ą on ¯ for .pQuasiQuoter for config files.IFIXME: if a non-optional part of an optional sub-config is missing, the 6Ô error is ignored and the entire sub-config is cleared. it would be better to distinguish between the cases `sub-config missing` and `sub-config provided incompletely`, and still raise an error in the latter.‡ÎLists are initialized empty by default. Append overwrites left values with right values. (If we tried to append list elements recursively, there would be awkward questions about matching list lengths.)ˆ There is no "instance Monoid (TaggedM (Type a)) , since there is no reasonable ´F. Therefore, we offer a specialized instance for labels that map to T.ŠIf one of two configs is Ž', do the expected thing. If both are °, append the values.™‰You can provide a list value via the shell environment by providing a single element. This element will be put into a list implicitly.˙–(A more general approach that allows for yaml-encoded list values in shell variables is more tricky to design, implement, and use: If you have a list of sub-configs and don't want the entire sub-config to be yaml-encoded, but use a longer shell variable name to go further down to deeper sub-configs, there is a lot of ambiguity. It may be possible to resolve that at run-time, but it's more tricky.)›tThe paths into the recursive structure of the config file are concatenated to shell variable names with separating '_'. (It is still ok to have '_'b in your config path names. This parser chops off complete matching names, whether they contain '_'/ or not, and only then worries about trailing '_'.) instance FromJSON Typež instance ParseJSON OptionŸ instance ParseJSON ListĄinstance FromJSON Label+ (tolerates unknown fields in json object.)ĸ instance FromJSON RecordŖ instance ToJSON Type¤ instance ToJSON OptionĨ instance ToJSON List§ instance ToJSON Label¨ instance ToJSON RecordŽ  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­q  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop¯WXVUNOPQRSTMLKHIJFGABCDE@?>;<=89:­ŦĢĒ)*-/0456+,.,1237ŠYZ[\]^_`a¨§ĻĨ¤ŖĸĄ Ÿž(&'œ›š™˜—%#$–bcdefgh"! ij•”“’‘ŽŒklm‹Š‰ˆ‡†…„ƒ‚€ ~}|{zn oyxwvutsrqpz   !"#$%&'()*-/0456+,.,123789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­OUV WXhĩ      !"#$%&'()*+,-./01234567899:;;<=>?@AB>=CCDEFGHIJKLMNOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŠĒŦŠĒ­ŠĒŽŠ¯°Šą˛ŠĒŗ´confi_ApDYqDZZwa13YWVwiOvBaeData.Configifier HasRenderDoc renderDocHasToDoctoDoc DocOptional DocMandatoryDocDocDictDocListDocTypeCanonicalizePartialcanonicalizePartial emptyPartialFreezefrzthwToExc LookupFailedExcFailDoneToValESel'sel'Selsel NothingValue nothingValue ToValueMaybeCMaybeCNothingCJustOrElseToValHasParseCommandLineparseCommandLineArgsHasParseShellEnv parseShellEnvEnvErrorInvalidYamlStringinvalidYamlInputinvalidYamlMsgInvalidYamlFileinvalidYamlFile ShellEnvNilShellEnvNoParseshellEnvNoParseTypeshellEnvNoParseValueshellEnvNoParseMsgCommandLinePrimitiveParseErrorCommandLinePrimitiveOtherErrorFreezeIncompletefreezeIncompleteAtPathTaggedM fromTaggedMTagged fromTagged CommandLineShellEnv ConfigFileSource YamlStringYamlFileIdMaybeOJustONothingOToConfigNoDesc ToConfigCode ConfigCodeRecordLabelDescrListOptionType:>::>:*> configifyconfigifyWithDefaultdefaultSourceswithShellEnvPrefixreadUserConfigFileswithShellEnvPrefix'parseConfigFileparseConfigFileWithIncludesrenderConfigFileprimitiveParseCommandLine parseArgspopArgparseArgsWithEqSignparseArgsWithSpace parseArgName>>.orElse toValueMaybemergefreezethawdocs concatDoccfgify$fHasRenderDoc*CommandLine$fHasRenderDoc*ShellEnv$fHasRenderDoc*ConfigFile$fHasToDocType$fHasToDocOption$fHasToDocList$fHasToDocDescr$fHasToDocLabel$fHasToDocRecord$fCanonicalizePartialType$fCanonicalizePartialOption$fCanonicalizePartialList$fCanonicalizePartialDescr$fCanonicalizePartialLabel$fCanonicalizePartialRecord $fFreezeType$fFreezeOption $fFreezeList $fFreezeDescr $fFreezeLabel$fFreezeRecord$fMonoidTaggedM$fMonoidTaggedM0$fMonoidTaggedM1$fMonoidTaggedM2$fMonoidTaggedM3$fMonoidTaggedM4 $fSel'cfg: $fSel'cfg[] $fSelcfgps $fSelOptionps $fSelDescrps $fSelLabel: $fSelRecord: $fSelRecord[]$fNothingValueJust$fNothingValueNothing$fHasParseCommandLinecfg$fHasParseShellEnvType$fHasParseShellEnvOption$fHasParseShellEnvList$fHasParseShellEnvDescr$fHasParseShellEnvLabel$fHasParseShellEnvRecord$fFromJSONTaggedM$fFromJSONTaggedM0$fFromJSONTaggedM1$fFromJSONTaggedM2$fFromJSONTaggedM3$fFromJSONTaggedM4$fToJSONTaggedM$fToJSONTaggedM0$fToJSONTaggedM1$fToJSONTaggedM2$fToJSONTaggedM3$fToJSONTaggedM4$fExceptionError $fShowTaggedM $fShowTagged $fEqTaggedM $fEqTaggedbaseGHC.BaseNothingMaybeJust<|>Data.Typeable.InternalTypeableSystem.Environment getProgNamemempty