úÎ!,0(¨4      !"#$%&'()*+,-./0123None"#7'looper9Settings that you might want to pass into a looper using !looper.A structure to configuration for a looper into looper<A structure to parse environment variables for a looper intolooper9A structure to parse command-line flags for a looper intolooperA looper definitionlooper1The name of the looper, can be useful for logginglooperWhether this looper is enabledlooper&The time between the start of each runlooperThe time before the first runlooperThe function to runlooper Construct a 4 from a number of secondslooper Construct a 4 from a number of minuteslooper Construct a 4 from a number of hourslooper#An optparse applicative parser for looperGet a   from a the environment5looperGet a   from a pure environment"looperSimply run loopers 4runLoopers = runLoopersIgnoreOverrun $ looperDefFuncsee #ENote that this function will loop forever, you need to wrap it using 6 yourself.#looper7Run loopers with a custom runner, ignoring any overruns 1runLoopersIgnoreOverrun = runLoopersRaw (pure ())see $ENote that this function will loop forever, you need to wrap it using 6 yourself.$looper5Run loopers, with a custom runner and overrun handler„The overrun handler is run when the looper function takes longer than its period. You can use this to log a warning, for example.FThe runner function is used to run the looper function You can use   :: LooperDef m -> m () to run a Q, and you can wrap this function in some custom logic before you pass it into $? In this manner you can add logging or metrics, for example.ENote that this function will loop forever, you need to wrap it using 6 yourself.%looperWait for a given 4=This takes care of the conversion to microseconds to pass to 7 for you. WwaitNominalDiffTime ndt = liftIO $ threadDelay $ round (toRational ndt * (1000 * 1000))&looper?You can parse Data.Aeson's JSON or Data.Yaml's YAML to parse a %. You can also use Data.Yaml.Config.looper5Prefix for each variable (best to make this all-caps)looper3Name of the looper (best to make this all-caps too)5looper5Prefix for each variable (best to make this all-caps)looper3Name of the looper (best to make this all-caps too)#looper Custom runnerlooperLoopers$looperOverrun handlerlooperRunnerlooperLoopers&  !"#$%&   !"#$%Safe(ƒ89:;<=>?@       !"#$%&'()*+,-./01234567869:;<=>?@ABC%looper-0.0.0.0-6HM2CNJJqEd9HreL0gQUqQLooper Paths_looperLooperSettingslooperSetEnabledlooperSetPhaselooperSetPeriodLooperConfigurationlooperConfEnabledlooperConfPhaselooperConfPeriodLooperEnvironmentlooperEnvEnabledlooperEnvPhaselooperEnvPeriod LooperFlagslooperFlagEnabledlooperFlagPhaselooperFlagPeriod LooperDef looperDefNamelooperDefEnabledlooperDefPeriodlooperDefPhase looperDefFuncsecondsminuteshoursgetLooperFlagsgetLooperEnvironmentderiveLooperSettings mkLooperDef runLoopersrunLoopersIgnoreOverrun runLoopersRawwaitNominalDiffTime$fFromJSONLooperConfiguration$fGenericLooperDef$fShowLooperFlags$fEqLooperFlags$fGenericLooperFlags$fShowLooperEnvironment$fEqLooperEnvironment$fGenericLooperEnvironment$fShowLooperConfiguration$fEqLooperConfiguration$fGenericLooperConfiguration$fShowLooperSettings$fEqLooperSettings$fGenericLooperSettings time-1.8.0.2(Data.Time.Clock.Internal.NominalDiffTimeNominalDiffTimereadLooperEnvironment&unliftio-0.2.10-1qBqSiBXLZs1q1ojYCqYZuUnliftIO.Internals.AsyncasyncUnliftIO.Concurrent threadDelayversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName