@W      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNoneG?Top-level configuration value, corresponding to the libconfig config_t'. Wrapped opaquely for pointer-safety.Corresponds to a  libconfig config_setting_t- value; wrapped opaquely for pointer safety.lThis is used for fine-grained configuration of how integers are output when a config file is written. See U and the  libconfig manual.5This is a set of possible errors that can occur when  libconfig! tries to read in a config file.Tells whether a   value is a collection ( ,   or ).isCollectionType GroupTypeTrueisCollectionType BoolTypeFalseTells whether a  , value is a scalar (i.e. not a collection).isScalarType FloatTypeTrueisScalarType ListTypeFalseNote:isScalarType NoneTypeTrueThis function allocates a new  and initializes it. libconfig manages storage for all  objects via the  , so if a 4 goes out of scope, GHC may get rid of it, and any J objects may become invalid. This function can be used to ensure that a 8 doesn't get automatically garbage-collected too early. Read in a - from the specified configuration file. The % should already be initialized with . Create a new = and read in the data from the specified configuration file. 7> configNew s = configInit >>= \c -> configReadFile c s Write out a % to the specified configuration file.&Read configuration data from a string. AJust appwinwidth <- configLookup conf "application.window.size.w"configSettingGetInt appwinwidth640!>Just miscbigint <- configLookup conf "application.misc.bigint" configSettingGetInt64 miscbigint9223372036854775807"6Just miscpi <- configLookup conf "application.misc.pi"configSettingGetFloat miscpi 3.141592654#=Just listbool <- configLookup conf "application.list.[0].[2]"configSettingGetBool listboolTrue$=Just wintitle <- configLookup conf "application.window.title"configSettingGetString wintitle"My Application"%"configSettingLookupInt winsize "w"Just 640&&configSettingLookupInt64 misc "bigint"Just 9223372036854775807'"configSettingLookupFloat misc "pi"Just 3.141592654(c(The example configuration file does not contain any boolean values that are direct children of a config_setting_t.)))Just win <- configLookupFrom app "window"%configSettingLookupString win "title"Just "My Application"*BJust treasureqty <- configLookup conf' "application.books.[0].qty"#configSettingSetInt treasureqty 222Just ()configSettingGetInt treasureqty222+?Just miscbigint <- configLookup conf' "application.misc.bigint"2configSettingSetInt64 miscbigint 92233720368547758Just () configSettingGetInt64 miscbigint92233720368547758,FJust treasureprice <- configLookup conf' "application.books.[0].price")configSettingSetFloat treasureprice 22.22Just ()#configSettingGetFloat treasureprice22.22->Just listbool <- configLookup conf' "application.list.[0].[2]"#configSettingSetBool listbool FalseJust ()configSettingGetBool listboolFalse.HJust treasureauthor <- configLookup conf' "application.books.[0].author";configSettingSetString treasureauthor "Robert L. Stevenson"Just ()%configSettingGetString treasureauthor"Robert L. Stevenson"/:Just treasure <- configLookup conf "application.books.[0]""configSettingGetIntElem treasure 3501Just misc <- configLookup conf "application.misc" configSettingGetInt64Elem misc 1922337203685477580711Just list <- configLookup conf "application.list" configSettingGetFloatElem list 11.2342q(The example configuration does not contain any boolean values that are direct children of collections of type config_setting_t).32Just win <- configLookup conf "application.window" configSettingGetStringElem win 0"My Application"4*(This example appends a new value of type  to application.listR, because the example file contains no suitable example values for us to modify.)2Just list <- configLookup conf' "application.list"1Just new3 <- configSettingSetIntElem list (-1) 22configSettingGetIntElem list 322configSettingGetInt new3225*(This example appends a new value of type  to application.listR, because the example file contains no suitable example values for us to modify.)2Just list <- configLookup conf' "application.list"BJust new3 <- configSettingSetInt64Elem list (-1) 92233720368547758 configSettingGetInt64Elem list 392233720368547758configSettingGetInt64 new39223372036854775862Just list <- configLookup conf' "application.list"4Just new1 <- configSettingSetFloatElem list 1 0.2222 configSettingGetFloatElem list 10.2222configSettingGetFloat new10.22227*(This example appends a new value of type   to application.listR, because the example file contains no suitable example values for us to modify.)2Just list <- configLookup conf' "application.list"5Just new3 <- configSettingSetBoolElem list (-1) FalseconfigSettingGetBoolElem list 3FalseconfigSettingGetBool new3False8>Just misccols <- configLookup conf' "application.misc.columns":Just new0 <- configSettingSetStringElem misccols 0 "butts"%configSettingGetStringElem misccols 0"butts"configSettingGetString new0"butts"9=Just col0 <- configLookup conf "application.misc.columns.[0]"configSettingIndex col00:9Just cols <- configLookup conf "application.misc.columns"configSettingLength cols3;9Just cols <- configLookup conf "application.misc.columns"(Just col0 <- configSettingGetElem cols 0configSettingGetString col0 "Last Name"</Just miscpi <- configSettingGetMember misc "pi"configSettingGetFloat miscpi 3.141592654=3Just misc' <- configLookup conf' "application.misc"=Just randSeed <- configSettingAdd misc' "random_seed" IntTypeconfigSettingSetInt randSeed 55Just ()configSettingGetInt randSeed55*configSettingLookupInt misc' "random_seed"Just 55configSettingGetIntElem misc' 455>3Just misc' <- configLookup conf' "application.misc"configSettingLength misc'4#configSettingRemove misc' "bitmask"Just ()configSettingLength misc'3?3Just misc' <- configLookup conf' "application.misc"configSettingLength misc'4configSettingRemoveElem misc' 2Just ()configSettingLength misc'3)Just new2 <- configSettingGetElem misc' 2configSettingType new2IntTypeconfigSettingGetInt new28131@+Just app <- configLookup conf "application"configSettingName appJust "application"A(Just list <- configLookupFrom app "list"configSettingName list Just "list"BAJust appwinwidth <- configLookup conf "application.window.size.w""configSettingGetFormat appwinwidth DefaultFormatCCJust appwinwidth' <- configLookup conf' "application.window.size.w"#configSettingGetFormat appwinwidth' DefaultFormat-configSettingSetFormat appwinwidth' HexFormatJust ()#configSettingGetFormat appwinwidth' HexFormatD0configLookupInt conf "application.window.size.w"Just 640E0configLookupInt64 conf "application.misc.bigint"Just 9223372036854775807F,configLookupFloat conf "application.misc.pi"Just 3.141592654G0configLookupBool conf "application.list.[0].[2]" Just TrueH2configLookupString conf "application.window.title"Just "My Application"I1Just list <- configLookup conf "application.list"configSettingType listListTypeJ2Just grp <- configLookup conf "application.window"configSettingIsGroup grpTrueK8Just arr <- configLookup conf "application.misc.columns"configSettingIsArray arrTrueL1Just list <- configLookup conf "application.list"configSettingIsList listTrueM2Just grp <- configLookup conf "application.window"8Just arr <- configLookup conf "application.misc.columns"1Just list <- configLookup conf "application.list";Just width <- configLookup conf "application.window.size.w"5mapM configSettingIsAggregate [grp, arr, list, width][True,True,True,False]N8Just int <- configLookup conf "application.window.pos.x":Just bigint <- configLookup conf "application.misc.bigint"5Just float <- configLookup conf "application.misc.pi"2Just grp <- configLookup conf "application.window"4mapM configSettingIsNumber [int, bigint, float, grp][True,True,True,False]O8Just int <- configLookup conf "application.window.pos.x":Just bigint <- configLookup conf "application.misc.bigint"5Just float <- configLookup conf "application.misc.pi"9Just bool <- configLookup conf "application.list.[0].[2]"8Just str <- configLookup conf "application.window.title"2Just grp <- configLookup conf "application.window"?mapM configSettingIsScalar [int, bigint, float, bool, str, grp] [True,True,True,True,True,False]P1Just list <- configLookup conf "application.list"configSettingName list Just "list"6Just list1 <- configLookup conf "application.list.[0]"configSettingName list1NothingQ1Just list <- configLookup conf "application.list"$Just app <- configSettingParent listconfigSettingName appJust "application"RconfigSettingIsRoot appFalse#Just root <- configRootSetting confconfigSettingIsRoot rootTrueS#Just root <- configRootSetting conf5Just version <- configSettingGetMember root "version"configSettingGetString version"1.0"TconfigGetDefaultFormat conf' DefaultFormat&configSetDefaultFormat conf' HexFormatconfigGetDefaultFormat conf' HexFormatUconfigGetDefaultFormat conf DefaultFormatVconfigGetTabWidth conf'2configSetTabWidth conf' 8configGetTabWidth conf'8WconfigGetTabWidth conf2XconfigSettingSourceLine app5YconfigSettingSourceFile app"test/test.conf"This is a set of possible  libconfig% types. Many functions will return @ if you attempt to use a value as the incorrect type. See the  libconfig manual for more details.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]Y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]Y   %&'() !"#$*+,-./012345678@ADEFGH9:;<=>?PQRSXYUTBCWVZ[\]IJLKMNO      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\](c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNone+0 ^ libconfig ^ s are like _$s, except that each element in the ^ is a n2 with its own unique name, not just an unlabeled i._ libconfig _s can contain any number of is.` libconfig `s can contain any number a values.a A libconfig aN value is a boolean value, a string or one of an assortment of numeric types.i A libconfig i is either a a# value or some type of collection.nA  libconfig n is a name-value pair,  name := value.pGet out the name of a nqGet out the value of a nr"isScalar $ Scalar (String "butts")True!isScalar $ Array [String "butts"]Falses isCollection = not . isScalar&isCollection $ Scalar (String "butts")False%isCollection $ Array [String "butts"]Truet isArray $ Array [String "butts"]True(isArray $ List [Scalar $ String "butts"]FalseuisList $ Array [String "butts"]False'isList $ List [Scalar $ String "butts"]Truev isGroup $ Array [String "butts"]False4isGroup $ Group ["asset" := Scalar (String "butts")]True%^_`abcdefghijklmnopqrstuv     ^_`abcdefghijklmnopqrstuvnopqimlkjrstvuahgfedcb`_^^_`ahgfedcbimlkjnopqrstuv     o(c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNonewConvert a native  into a top-level ^ of ns.)Just conf <- C.configNew "test/test.conf" decode confJust ["version" := Scalar (String "1.0"),"application" := Group ["window" := Group ["title" := Scalar (String "My Application"),"size" := Group ["w" := Scalar (Integer 640),"h" := Scalar (Integer 480)],"pos" := Group ["x" := Scalar (Integer 350),"y" := Scalar (Integer 250)]],"list" := List [List [Scalar (String "abc"),Scalar (Integer 123),Scalar (Boolean True)],Scalar (Float 1.234),List []],"books" := List [Group ["title" := Scalar (String "Treasure Island"),"author" := Scalar (String "Robert Louis Stevenson"),"price" := Scalar (Float 29.95),"qty" := Scalar (Integer 5)],Group ["title" := Scalar (String "Snow Crash"),"author" := Scalar (String "Neal Stephenson"),"price" := Scalar (Float 9.99),"qty" := Scalar (Integer 8)]],"misc" := Group ["pi" := Scalar (Float 3.141592654),"bigint" := Scalar (Integer64 9223372036854775807),"columns" := Array [String "Last Name",String "First Name",String "MI"],"bitmask" := Scalar (Integer 8131)]]]x^Load the libconfig configuration file at the given path and try to convert it to a top-level ^ of ns.decodeFrom "test/test.conf"Just ["version" := Scalar (String "1.0"),"application" := Group ["window" := Group ["title" := Scalar (String "My Application"),"size" := Group ["w" := Scalar (Integer 640),"h" := Scalar (Integer 480)],"pos" := Group ["x" := Scalar (Integer 350),"y" := Scalar (Integer 250)]],"list" := List [List [Scalar (String "abc"),Scalar (Integer 123),Scalar (Boolean True)],Scalar (Float 1.234),List []],"books" := List [Group ["title" := Scalar (String "Treasure Island"),"author" := Scalar (String "Robert Louis Stevenson"),"price" := Scalar (Float 29.95),"qty" := Scalar (Integer 5)],Group ["title" := Scalar (String "Snow Crash"),"author" := Scalar (String "Neal Stephenson"),"price" := Scalar (Float 9.99),"qty" := Scalar (Integer 8)]],"misc" := Group ["pi" := Scalar (Float 3.141592654),"bigint" := Scalar (Integer64 9223372036854775807),"columns" := Array [String "Last Name",String "First Name",String "MI"],"bitmask" := Scalar (Integer 8131)]]]wxwxwxwx(c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNoney Compute the   of a i#valueType (Scalar (String "butts")) StringType"valueType (Array [String "butts"]) ArrayTypez Compute the   of a ascalarType (String "butts") StringTypescalarType (Boolean False)BoolType{Convert a top-level ^ of ns into a native . This allocates a new .$Just conf <- runMaybeT $ encode test5C.configWriteFile conf "/tmp/encode_output_test.conf"Just ():Just newconf <- C.configNew "/tmp/encode_output_test.conf"|Convert a top-level ^ of nNs into a native libconfig structure and output it to the specified file path.:runMaybeT $ encodeTo test "/tmp/encode_output_test_2.conf"Just ():Just newconf <- C.configNew "/tmp/encode_output_test.conf"}Encode a top-level ^ of n#s and write them to the specified .~Set the value of the given  to the provided i (recursively). If this E is of a collection type, any pre-existing children will be removed. yz{|}~yz{|}~{}~|yz yz{|}~(c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNoneHM 4("asset" := Scalar (String "butts")) ^. settingValueScalar (String "butts")J("asset" := Scalar (String "butts")) & settingValue .~ Scalar (Float 22.2)"asset" := Scalar (Float 22.2)3("asset" := Scalar (String "butts")) ^. settingName"asset"=("asset" := Scalar (String "butts")) & settingName .~ "shake"""shake" := Scalar (String "butts")"Scalar (String "butts") ^? _ScalarJust (String "butts")R("asset" := Scalar (String "butts")) & settingValue . _Scalar . _String .~ "money"""asset" := Scalar (String "money")_Scalar # String "butts"Scalar (String "butts") Array [String "butts"] ^? _ArrayJust [String "butts"][("asset" := Array [String "butts"]) & settingValue . _Array . traverse . _String .~ "money"!"asset" := Array [String "money"][Group ["asset" := Scalar (String "butts"), "price" := Scalar (Float 22.2)] ^? _Group . ix 0)Just ("asset" := Scalar (String "butts"))Group ["asset" := Scalar (String "butts"), "price" := Scalar (Float 22.2)] & _Group . traverse . settingValue . _Scalar . _Float %~ (*2)IGroup ["asset" := Scalar (String "butts"),"price" := Scalar (Float 44.4)]CList [Scalar (String "butts"), Scalar (Float 22.2)] ^? _List . ix 0Just (Scalar (String "butts"))aList [Scalar (String "butts"), Scalar (Float 22.2)] & _List . traverse . _Scalar . _Float %~ (*2)2List [Scalar (String "butts"),Scalar (Float 44.4)]Boolean False ^? _Boolean Just False2Scalar (Boolean False) & _Scalar . _Boolean %~ notScalar (Boolean True)Integer 22 ^? _IntegerJust 220Scalar (Integer 22) & _Scalar . _Integer %~ (*2)Scalar (Integer 44)"Integer64 2222222222 ^? _Integer64Just 2222222222<Scalar (Integer64 2222222222) & _Scalar . _Integer64 %~ (*2)Scalar (Integer64 4444444444)Hex 22 ^? _HexJust 22(Scalar (Hex 22) & _Scalar . _Hex %~ (*2)Scalar (Hex 44)Hex64 2222222222 ^? _Hex64Just 22222222224Scalar (Hex64 2222222222) & _Scalar . _Hex64 %~ (*2)Scalar (Hex64 4444444444)Float 22.22 ^? _Float Just 22.22/Scalar (Float 22.22) & _Scalar . _Float %~ (*2)Scalar (Float 44.44)String "butts" ^? _String Just "butts"Float 22.22 ^? _StringNothingimport Data.Monoid ((<>))<Scalar (String "butts") & _Scalar . _String %~ ("hello " <>)Scalar (String "hello butts") !"#$   !"#$(c) Matthew Peddie 2014BSD3mpeddie@gmail.com experimentalGHCNone3^_`abcdefghijklmnopqrstuvwxyz{|}~%       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstujklmvwxyz{|}~k      !"#$%&'libconfig-0.2.0.0Language.Libconfig.TypesLanguage.Libconfig.BindingsLanguage.Libconfig.DecodeLanguage.Libconfig.EncodeLanguage.Libconfig.OpticsLanguage.LibconfigbaseGHC.IntInt32Int64GHC.WordWord32Word64 text-1.2.0.4Data.Text.InternalText ConfigurationSetting ConfigFormat HexFormat DefaultFormat ConfigTypeListType ArrayTypeBoolType StringType FloatType Int64TypeIntType GroupTypeNoneType ConfigErrConfigErrParseConfigErrFileIo ConfigErrNoneisCollectionType isScalarType configInittouchConfigurationconfigReadFile configNewconfigWriteFileconfigReadStringconfigSettingGetIntconfigSettingGetInt64configSettingGetFloatconfigSettingGetBoolconfigSettingGetStringconfigSettingLookupIntconfigSettingLookupInt64configSettingLookupFloatconfigSettingLookupBoolconfigSettingLookupStringconfigSettingSetIntconfigSettingSetInt64configSettingSetFloatconfigSettingSetBoolconfigSettingSetStringconfigSettingGetIntElemconfigSettingGetInt64ElemconfigSettingGetFloatElemconfigSettingGetBoolElemconfigSettingGetStringElemconfigSettingSetIntElemconfigSettingSetInt64ElemconfigSettingSetFloatElemconfigSettingSetBoolElemconfigSettingSetStringElemconfigSettingIndexconfigSettingLengthconfigSettingGetElemconfigSettingGetMemberconfigSettingAddconfigSettingRemoveconfigSettingRemoveElem configLookupconfigLookupFromconfigSettingGetFormatconfigSettingSetFormatconfigLookupIntconfigLookupInt64configLookupFloatconfigLookupBoolconfigLookupStringconfigSettingTypeconfigSettingIsGroupconfigSettingIsArrayconfigSettingIsListconfigSettingIsAggregateconfigSettingIsNumberconfigSettingIsScalarconfigSettingNameconfigSettingParentconfigSettingIsRootconfigRootSettingconfigSetDefaultFormatconfigGetDefaultFormatconfigSetTabWidthconfigGetTabWidthconfigSettingSourceLineconfigSettingSourceFileconfigErrorFileconfigErrorTextconfigErrorLineconfigErrorTypeGroupListArrayScalarStringFloatHex64Hex Integer64IntegerBooleanValue:=getSettingNamegetSettingValueisScalar isCollectionisArrayisListisGroupdecode decodeFrom valueType scalarTypeencodeencodeToencodeAt encodeValue settingValue settingName_Scalar_Array_Group_List_Boolean_Integer _Integer64_Hex_Hex64_Float_String$fEnumConfigErr Data.MaybeNothinggetConfigurationConfig root'Configdestructor'Config flags'Configtab_width'Configdefault_format'Configinclude_dir'Configerror_text'Configerror_file'Configerror_line'Configerror_type'Configfilenames'Confignum_filenames'Config getSettingSetting' name'Setting type'Settingformat'Setting value'Settingparent'Settingconfig'Setting hook'Setting line'Setting file'Setting ConfigValueNoneSValFValLLValIVal ConfigListlength'ConfigListelements'ConfigList ConfigPtr SettingPtr ConfigListPtr ConfigBool ConfigTrue ConfigFalseconfigSettingSetFormat'_configSettingGetFormat'_configLookupString''_configLookupBool''_configLookupFloat''_configLookupInt64''_configLookupInt''_configLookupFrom'_configLookup'_configSettingRemoveElem'_configSettingRemove'_configSettingAdd'_configSettingGetMember'_configSettingGetElem'_configSettingLength'_configSettingIndex'_configSettingSetStringElem'_configSettingSetBoolElem'_configSettingSetFloatElem'_configSettingSetInt64Elem'_configSettingSetIntElem'_configSettingGetStringElem'_configSettingGetBoolElem'_configSettingGetFloatElem'_configSettingGetInt64Elem'_configSettingGetIntElem'_configSettingSetString'_configSettingSetBool'_configSettingSetFloat'_configSettingSetInt64'_configSettingSetInt'_configSettingLookupString''_configSettingLookupBool''_configSettingLookupFloat''_configSettingLookupInt64''_configSettingLookupInt''_configSettingGetString'_configSettingGetBool'_configSettingGetFloat'_configSettingGetInt64'_configSettingGetInt'_configReadString'_configWriteFile'_configReadFile'_configDestroy' configInit'fromEnumIntegraltoEnumIntegralconfigValueTypepeekConfigValuepokeConfigValuewithConfigurationmodifyConfigurationonConfigurationcheckPtr checkSetting peekIntegral peekFloatpeekBool peekStringasBool checkBool checkTupleconfigSettingLookupInt'configSettingLookupInt64'configSettingLookupFloat'configSettingLookupBool'configSettingLookupString'configLookupInt'configLookupInt64'configLookupFloat'configLookupBool'configLookupString'$fStorableConfig$fStorableSetting'$fStorableConfigList$fSerializeScalar$fSerializeValue$fSerializeSetting$fBinaryScalar $fBinaryValue$fBinarySetting$fNFDataScalar$fHashableScalar $fNFDataValue$fHashableValue$fNFDataSetting$fHashableSettingtoScalartoListtoArraytoGrouptoValue decodeSetting scalarSetaddValue addSettingsetValue checkType removeKidsPrism'PrismLens'Lensprism