!F <7      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None=?  None=? None4Q !"#$%&'()* !"#$%&'()*None=>? R/salakMonad has the ability to get a 1 instance.7salak%Reload result, show erros or changes.9salakIf reload process has errors.:salakFIf hasError then this show error messages, else this show change logs.=salak0Get reload action which used for reload profiles/012654378:9;<=>None"#48=>?@AHMUVX ?salakProp operators.%Suppose we have following definition: Gdata Config = Config { enabled :: Bool , level :: IO LogLevel }@salakParse or default value instance MonadThrow m => FromProp m Config where fromProp = Config <$> "enabled" .?= True <*> "level" .?= (return LevelInfo)IO value will work right.AsalakParse or auto extract from a  value instance Default Config where def = Config True (return LevelInfo) instance MonadThrow m => FromProp m Config where fromProp = Config <$> "enabled" .?: enabled <$> "level" .?: levelCsalak Parse failedDsalak Not foundEsalakECore type class of salak, which provide function to parse properties.FsalakParse properties using H. For example: a :: Bool <- require "bool.key" b :: Maybe Int <- require "int.optional.key" c :: Either String Int <- require "int.error.key" d :: IO Int <- require "int.reloadable.key"JsalakParse primitive value from KsalakParse enum value from salakSupport normal valuesalakSupport IO value?A@BDCEFGHIJK@5A5None"#4=>?@AHMPSVX*? LsalakConvert arguments to propertiesMsalakSimple IO MonadNsalak Standard E instance.OsalakSimple IO MonadPsalakXConfiguration Loader Monad, used for load properties from sources. Custom loaders using SSsalak Basic loaderTsalak Simple loaderUsalak-Standard salak functions, by load and with a 1 instance. Users should use 1 to create custom /- instances, then you get will an instance of E.VsalakLoad mock variables into <Wsalak Load environment variables into <Xsalak+Default way to parse command line argumentsYsalak+Default way to parse command line argumentsZsalak6Try load file, if file does not exist then do nothing.3 /0123456;<>EFLMNOPQRSTUVWXYZ3USTPONMREF/0VWYLXZ<; > Q123456(c) 2019 Daniel YUBSD3leptonyu@gmail.com experimentalportableNone "#=?SUVX:e tsalakLoad file by extensionusalakProp load configurationwsalak Config namexsalakSpecify config dirysalak&Search current directory, default truezsalak%Search home directory, default false.{salakHow to parse commandlinesalakConfiguration file name}salak4Load files with specified format, yaml or toml, etc.~salakjDefault load salak. All these configuration sources has orders, from highest priority to lowest priority: 1. loadCommandLine 2. loadEnvironment 3. loadConfFiles 4. load file from folder `salak.conf.dir` if defined 5. load file from current folder if enabled 6. load file from home folder if enabled 7. file extension matching, support yaml or toml or any other loader.salak/Standard salak functions, by load and run with N.salak"Run salak, load strategy refer to ~salak"Run salak, load strategy refer to 5/01789:=?@ABCDEFGHIJKLMNOPUVWXYpqrstuv{wxyz|}~5Uuv{wxyz|EF/0NMPOYLXWV~t}rspq789:=?@AHIGJK1BCDp3q3    !""##$%&'()*+,-./0123456789::;<=>??@ABCDEFGHIIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvvwxyzz{|}~M salak-0.3-KXbhZBdDZE3FsoQo4AijE7Salak.InternalSalak Salak.TrieSalak.Internal.KeySalak.Internal.ValSalak.Internal.SourceSalak.Internal.PropbaseControl.Monad.IO.ClassMonadIO(exceptions-0.10.2-2mS9GUVmJpmKSw5CuaN6ikControl.Monad.Catch MonadThrow MonadCatchToKeystoKeysKeysunKeysKeyKTKI simpleKeysToValuetoValValueVTVIVBVLTVDVHVZTVUValTrieemptynullmemberlookupinsertmodifymodify'modifyFalteralterFtoListfromListfilter partition unionWithmerge$fFoldableTrie $fShowTrie$fEqTrie $fFunctorTrie MonadSalakaskSalak SourcePacksourceprefqrefreload ReloadResulthasErrormsgs TraceSourceSource askReloadsetValPropOp.?=.?: PropException NullExceptionHasSalakrequirePropFromPropfromProp readPrimitivereadEnumParseCommandLineRunSalak RunSalakT LoadSalak LoadSalakTliftNT runRunSalakloadTrieloadListloadAndRunSalak'loadMockloadEnvdefaultParseCommandLineloadCommandLine tryLoadFile$fMonadUnliftIOLoadSalakT$fMonadIOLoadSalakT"$fMonadStateUpdateSourceLoadSalakT$fMonadCatchLoadSalakT$fMonadThrowLoadSalakT$fMonadSalakLoadSalakT$fMonadSalakm'$fMonadUnliftIORunSalakT$fMonadIORunSalakT$fMonadCatchRunSalakT$fMonadThrowRunSalakT $fMonadReaderSourcePackRunSalakT$fMonadSalakRunSalakT$fFunctorLoadSalakT$fApplicativeLoadSalakT$fMonadLoadSalakT$fMonadTransLoadSalakT$fFunctorRunSalakT$fApplicativeRunSalakT$fMonadRunSalakT$fMonadTransRunSalakT:|:HasLoadloadersExtLoad PropConfig configName configDirKey searchCurrent searchHome commandLineloadExt loadByExt loadSalak loadSalakWithloadAndRunSalakrunSalak runSalakWith$fDefaultPropConfig $fHasLoad:|:isNumValsunValsPriorityModTypeNoopDelAddModprioritytypeOfVgetTypenullVals emptyVals deleteValsgetValdelValsmodValsmodVals'QFuncdiffextractgensearchsearch2search1fmtfmtMod loadSource1data-default-class-0.1.2.0-FeIQ5tLoVZBHMSgrT9zptQData.Default.ClassDefault text-1.2.3.1Data.Text.InternalText $fPropOpfa$fPropOpPropIO GFromProp gFromPropunProprunPropbuildIO convertExpnotFounderrgEnumtoNumFileName