Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
- data DebounceSettings
- defaultDebounceSettings :: DebounceSettings
- debounceFreq :: DebounceSettings -> Int
- debounceAction :: DebounceSettings -> IO ()
- debounceEdge :: DebounceSettings -> DebounceEdge
- debounceThreadName :: DebounceSettings -> String
- leadingEdge :: DebounceEdge
- trailingEdge :: DebounceEdge
- mkDebounce :: DebounceSettings -> IO (IO ())
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