úÎ3ƒ/à<      !"#$%&'()*+,-./0123456789:;None<&Time delay between calls to the actionAction to perform<<NoneËPrepare a save action which writes settings into a JSON file. This action defers the work to a separate dedicated thread, and ensures the file isn't saved more than once within the given time interval.ZThe action is non-blocking but there is a chance a save is missed if saves are triggered ‚You can call the returned action from your UI thread as a reaction to a settings change, without worrying about delay or IO load.!Try to load settings from a file.If an error occurs, =M a pair is returned. The boolean indicates whether reading the file failed (>!) or parsing the content failed (?'). The string is an error description.If the operation succeeds, @" the loaded settings are returned.AASafe79zA settings option. The option value itself is held as usual in regular application state, not here. What is held here is  functions0 applied to that state to get or set the value.       Safe    Safe!:Construct an empty section, no options and no subsections.")Construct a section with a single option.#Return ?' if this section contains any options, > otherwise.$Return ?+ if this section contains any subsections, > otherwise.%Return ?9 if this section is empty (no options, no subsections), > otherwise.&Return ?A if an option or a subsection is present at the specified path, > otherwise.'Return ?0 if an option is present at the specified path, > otherwise.(Return ?3 if a subsection is present at the specified path, > otherwise.)Return B1 the section or option at the specified path, or C( if this section contains no such path.*Return B& the option at the specified path, or C9 if this section doesn't contain an option at this path.+Return B' the section at the specified path, or C< if this section doesn't contain a subsection at this path.,œAdd the specified option at the specified path under this section. If the section previously contained an option for this path, the old value is replaced.-qRemove the option at the specified path, if present. If there is a section under this path, it won't be removed..rRemove the section at the specified path, if present. If there is an option under this path, it won't be removed./?Remove the option or section at the specified path, if present.!"#$%&'()*+,D-./!"#$%&'()*+,-./!"#$%&'()*+,-./!"#$%&'()*+,D-./Safe0MSplit a path string into its components, if it's a valid path syntactically.1OCreate a string representation of a path, with the parts separated by periods.01010101Safe 2TODO3TODO4TODO5TODO6TODO7TODO8TODO9TODO:TODO;TODO 23456EF789:; 23456789:; 23456789:; 23456EF789:;SafeG      !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIGHJDEKLDMNDMOPQRSsetti_EqRxHwWwo7dH0kxuQtvWXLData.Settings.PersistData.Settings.TypesData.Settings.OptionData.Settings.SectionData.Settings.RouteData.Settings.InterfaceControl.Debounce Data.SettingsmkSaveSettings loadSettings MonadSettings getSettings putSettingsmodifySettingsgetSTree OptionValue readOption showOptiontypeName SettingsError InvalidPath NoSuchOption NoSuchSection NoSuchNodeInvalidValueForType InvalidValueOptRouteOptPathSecNameOptNameSectionsecOptssecSubsOptionoptGetoptSetoptReset mkOptionV mkOptionSempty singletonhasOptshasSubsnullmember memberOpt memberSublookup lookupOpt lookupSubinsert deleteOpt deleteSubdelete parseRoute showRoutequeryR querySectionR queryOptionR updateOptionR resetOptionRquery querySection queryOption updateOption resetOption mkDebouncebase Data.EitherLeftghc-prim GHC.TypesFalseTrueRight saveActionGHC.BaseJustNothing deleteImpl byPathMaybe byPathEither