O}G!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None !"&'()+2346=EHJKMBHelper 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.DTransformers' Identity is not in 5, so we roll our own. It's also less work to write.FF is isomorphic to , but is only used for N values.IMap  ConfgCode% types to the types of config values.JFilter P constructors from L.K!Map user-provided config type to L types.S7Add descriptive text to record field for documentation.T%Construction of config record fields.U Construction of config records (cons for record fields).[Very basic fist 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.`Map 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.aThis is a version of  on  for .wIFIXME: 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 M.~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 Listinstance 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{|}~h  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgUVTSLRQPONMKJIFHGDE@CBA?>=:;<7896)32.-,*45/01+WXYZ(&'%#$[\]^_`"! abcde~}|{zyxwv utsrqf gponmlkjihm    !"#$%&'() 32.-,*45/01+6789:;<=>?@CBADEFHGIJKLRQPONMSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RST UV`      !"#$%&'()*+,-./01234567889::;<=>?<=@AABCDEFGHIJKLMNOPQQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~configifier-0.0.3Data.Configifier HasRenderDoc renderDocHasToDoctoDoc DocOptional DocMandatoryDocDocTypeDocListDocDictCanonicalizePartialcanonicalizePartial emptyPartialFreezefrzthwToExc LookupFailedExcDoneFailToValESel'sel'Selsel NothingValue nothingValue ToValueMaybeCMaybeCJustCNothingOrElseToValHasParseCommandLineparseCommandLineArgsHasParseShellEnv parseShellEnvEnvErrorFreezeIncompletefreezeIncompleteAtPathCommandLinePrimitiveOtherErrorCommandLinePrimitiveParseErrorShellEnvNoParseshellEnvNoParseTypeshellEnvNoParseValueshellEnvNoParseMsg ShellEnvNil InvalidYamlinvalidYamlInputinvalidYamlMsgResultTaggedM fromTaggedMTagged fromTagged CommandLineShellEnv ConfigFileSourceConfigFileYamlIdMaybeONothingOJustOToConfigNoDesc ToConfigCode ConfigCodeTypeOptionListDescrLabelRecord:>::>:*> configify configify'parseConfigFilerenderConfigFileprimitiveParseCommandLine parseArgsparseArgsWithEqSignparseArgsWithSpace parseArgName>>.orElse toValueMaybemergefreezethawdocs concatDoc$fHasRenderDoc*CommandLine$fHasRenderDoc*ShellEnv$fHasRenderDoc*ConfigFile$fHasToDocType$fHasToDocOption$fHasToDocList$fHasToDocDescr$fHasToDocLabel$fHasToDocRecord$fCanonicalizePartialType$fCanonicalizePartialOption$fCanonicalizePartialList$fCanonicalizePartialLabel$fCanonicalizePartialRecord $fFreezeType$fFreezeOption $fFreezeList $fFreezeLabel$fFreezeRecord$fMonoidTaggedM$fMonoidTaggedM0$fMonoidTaggedM1$fMonoidTaggedM2$fMonoidTaggedM3 $fSel'cfg: $fSel'cfg[] $fSelcfgps $fSelOptionps $fSelLabel: $fSelRecord: $fSelRecord[]$fNothingValueJust$fNothingValueNothing$fHasParseCommandLinecfg$fHasParseShellEnvType$fHasParseShellEnvOption$fHasParseShellEnvList$fHasParseShellEnvLabel$fHasParseShellEnvRecord$fFromJSONTaggedM$fFromJSONTaggedM0$fFromJSONTaggedM1$fFromJSONTaggedM2$fFromJSONTaggedM3$fToJSONTaggedM$fToJSONTaggedM0$fToJSONTaggedM1$fToJSONTaggedM2$fToJSONTaggedM3$fExceptionError $fShowTaggedM $fShowTagged $fEqTaggedM $fEqTaggedbase Data.MaybeMaybeJustNothingControl.Applicative<|>Data.Typeable.InternalTypeable Data.Monoidmempty