úÎ_ÔV¨­      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦNone !"&'()+2346=EHJKM$ $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 P 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.\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 D! 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 .€IFIXME: if a non-optional part of an optional sub-config is missing, the *Ô 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 O.‰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{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦp  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoŽWXVUNTSRQPOMLKHJIFGAEDCB@?>;<=89:ŦĢĒŠ)532.-,*6747/01+¨YZ[\]^_`a§ĻĨ¤ŖĸĄ Ÿžœ(&'›š™˜—–%#$•bcdefgh"! ij”“’‘ŽŒ‹klmЉˆ‡†…„ƒ‚€ ~}|{zyn oxwvutsrqpy    !"#$%&'()532.-,*6747/01+89:;<=>?@AEDCBFGHJIKLMNTSRQPOUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦTUV WXh´      !"#$%&'()*+,-./01234567899:;;<=>?@=>ABCCDEFGHIJKLMNOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠǍŠ̍ŠŦ¨­Ž¨¯°¨ą˛¨ŗ´ĩconfigifier-0.0.4Data.Configifier HasRenderDoc renderDocHasToDoctoDoc DocOptional DocMandatoryDocDocTypeDocListDocDictCanonicalizePartialcanonicalizePartial emptyPartialFreezefrzthwToExc LookupFailedExcDoneFailToValESel'sel'Selsel NothingValue nothingValue ToValueMaybeCMaybeCJustCNothingOrElseToValHasParseCommandLineparseCommandLineArgsHasParseShellEnv parseShellEnvEnvErrorFreezeIncompletefreezeIncompleteAtPathCommandLinePrimitiveOtherErrorCommandLinePrimitiveParseErrorShellEnvNoParseshellEnvNoParseTypeshellEnvNoParseValueshellEnvNoParseMsg ShellEnvNilInvalidYamlFileinvalidYamlFileInvalidYamlStringinvalidYamlInputinvalidYamlMsgTaggedM fromTaggedMTagged fromTagged CommandLineShellEnv ConfigFileSourceYamlFile YamlStringIdMaybeONothingOJustOToConfigNoDesc ToConfigCode ConfigCodeTypeOptionListDescrLabelRecord:>::>:*> configifyconfigifyWithDefaultdefaultSourceswithShellEnvPrefixreadUserConfigFileswithShellEnvPrefix'parseConfigFileparseConfigFileWithIncludesrenderConfigFileprimitiveParseCommandLine parseArgspopArgparseArgsWithEqSignparseArgsWithSpace parseArgName>>.orElse toValueMaybemergefreezethawdocs concatDoc$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 $fEqTaggedbase Data.MaybeNothingMaybeJustControl.Applicative<|>Data.Typeable.InternalTypeableSystem.Environment getProgName Data.Monoidmempty