auto-update- Efficiently run periodic, on-demand actions

Safe HaskellSafe




Debounce an action, ensuring it doesn't occur more than once for a given period of time.

This is useful as an optimization, for example to ensure that logs are only flushed to disk at most once per second.

Example usage:

printString <- mkDebounce defaultDebounceSettings
                 { debounceAction = putStrLn "Running action"
                 , debounceFreq = 5000000 -- 5 seconds
>>> printString
Running action
>>> printString
<Wait five seconds>
Running action

See the fast-logger package (System.Log.FastLogger) for real-world usage.

Since: 0.1.2



data DebounceSettings Source #

Settings to control how debouncing should work.

This should be constructed using defaultDebounceSettings and record update syntax, e.g.:

let settings = defaultDebounceSettings { debounceAction = flushLog }

Since: 0.1.2

defaultDebounceSettings :: DebounceSettings Source #

Default value for creating a DebounceSettings.

Since: 0.1.2


debounceFreq :: DebounceSettings -> Int Source #

Microseconds lag required between subsequence calls to the debounced action.

Default: 1 second (1000000)

Since: 0.1.2

debounceAction :: DebounceSettings -> IO () Source #

Action to be performed.

Note: all exceptions thrown by this action will be silently discarded.

Default: does nothing.

Since: 0.1.2


mkDebounce :: DebounceSettings -> IO (IO ()) Source #

Generate an action which will trigger the debounced action to be performed. The action will either be performed immediately, or after the current cooldown period has expired.

Since: 0.1.2