| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
UnliftIO.Debounce.Internal
Description
Unstable API which exposes internals for testing.
Synopsis
- data DebounceSettings m = DebounceSettings {
- debounceFreq :: Int
- debounceAction :: m ()
- debounceEdge :: DebounceEdge
- debounceThreadName :: String
- data DebounceEdge
- leadingEdge :: DebounceEdge
- leadingMuteEdge :: DebounceEdge
- trailingEdge :: DebounceEdge
- trailingDelayEdge :: DebounceEdge
- mkDebounceInternal :: forall m. MonadUnliftIO m => MVar () -> (Int -> m ()) -> DebounceSettings m -> m (m ())
Documentation
data DebounceSettings m 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.0
Constructors
| DebounceSettings | |
Fields
| |
data DebounceEdge Source #
Setting to control whether the action happens at the leading and/or trailing edge of the timeout.
Since: 0.1.0
Constructors
| Leading | 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. |
| LeadingMute | Perform the action immediately, and then begin a cooldown period. If the trigger happens again during the cooldown, it is ignored. |
| Trailing | Start a cooldown period and perform the action when the period ends. If another trigger happens during the cooldown, it has no effect. |
| TrailingDelay | Start a cooldown period and perform the action when the period ends. If another trigger happens during the cooldown, it restarts the cooldown again. |
Instances
| Show DebounceEdge Source # | |
Defined in UnliftIO.Debounce.Internal | |
| Eq DebounceEdge Source # | |
Defined in UnliftIO.Debounce.Internal Methods (==) :: DebounceEdge -> DebounceEdge -> Bool Source # (/=) :: DebounceEdge -> DebounceEdge -> Bool Source # | |
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.
Example of how this style debounce works:
! = function execution . = cooldown period X = debounced code execution ! ! ! ! ....... ....... ....... ....... X X X X
Since: 0.1.0
leadingMuteEdge :: DebounceEdge Source #
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
Since: 0.1.0
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.
Example of how this style debounce works:
! = function execution
. = cooldown period
X = debounced code execution
! ! ! !
....... .......
X X
Since: 0.1.0
trailingDelayEdge :: DebounceEdge Source #
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
Since: 0.1.0
mkDebounceInternal :: forall m. MonadUnliftIO m => MVar () -> (Int -> m ()) -> DebounceSettings m -> m (m ()) Source #