auto-update-0.2.0: Efficiently run periodic, on-demand actions
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Debounce

Description

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
                 , debounceEdge = trailingEdge -- Trigger on the trailing edge
                 }
> 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

Synopsis

Type

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

Accessors

debounceFreq :: DebounceSettings -> Int Source #

Length of the debounce timeout period in microseconds.

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

debounceEdge :: DebounceSettings -> DebounceEdge Source #

Whether to perform the action on the leading edge or trailing edge of the timeout.

Default: trailingEdge.

Since: 0.1.6

leadingEdge :: DebounceEdge Source #

Perform the action immediately, and then begin a cooldown period. If the trigger happens again during the cooldown, wait until the end of the cooldown and then perform the action again, then enter a new cooldown period.

Since: 0.1.6

trailingEdge :: DebounceEdge Source #

Start a cooldown period and perform the action when the period ends. If another trigger happens during the cooldown, it has no effect.

Since: 0.1.6

Creation

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

Generate an action which will trigger the debounced action to be performed.

Since: 0.1.2