HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleauto-update-0.2.6Haskell2010

Control.Debounce

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.

  • 1 type
  • 10 values

Creation

1 declaration
valuemkDebounce :: DebounceSettings -> IO (IO ())
#

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

N.B. The generated action will always immediately return, regardless of the debounceFreq, as the debounced action (and the delay/cooldown) is always performed in a separate thread.

Settings

2 declarations
datadata DebounceSettings
#

Settings to control how debouncing should work.

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

let settings = defaultDebounceSettings { debounceAction = flushLog }

Accessors

Action to be performed.

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

Default: does nothing.

Edge types

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.

Example of how this style debounce works:

! = function execution
. = cooldown period
X = debounced code execution

!   !         !            !
 ....... ....... .......    .......
X       X       X          X

Perform the action immediately, and then begin a cooldown period. If the trigger happens again during the cooldown, it is ignored.

Example of how this style debounce works:

! = function execution
. = cooldown period
X = debounced code execution

!   !      !     !
 .......    .......
X          X

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

Example of how this style debounce works:

! = function execution
. = cooldown period
X = debounced code execution

!     !     !  !
 .......     .......
        X           X

Start a cooldown period and perform the action when the period ends. If another trigger happens during the cooldown, it restarts the cooldown again.

N.B. If a trigger happens DURING the debounceAction it starts a new cooldown. So if the debounceAction takes longer than the debounceFreq, it might run again before the previous action has ended.

Example of how this style debounce works:

! = function execution
. = cooldown period
X = debounced code execution

!           !  !    !
 .......     ...............
        X                   X