module UnliftIO.Debounce
(
mkDebounce
, DI.DebounceSettings
, defaultDebounceSettings
, DI.debounceFreq
, DI.debounceAction
, DI.debounceEdge
, DI.debounceThreadName
, DI.DebounceEdge
, DI.leadingEdge
, DI.leadingMuteEdge
, DI.trailingEdge
, DI.trailingDelayEdge
)
where
import Data.Functor.Identity
import UnliftIO (MonadUnliftIO)
import UnliftIO.Concurrent (newMVar, threadDelay)
import qualified UnliftIO.Debounce.Internal as DI
defaultDebounceSettings :: DI.DebounceSettings Identity
defaultDebounceSettings :: DebounceSettings Identity
defaultDebounceSettings =
DI.DebounceSettings
{ debounceFreq :: Int
DI.debounceFreq = Int
1000000
, debounceAction :: Identity ()
DI.debounceAction = forall (m :: * -> *) a. Monad m => a -> m a
return ()
, debounceEdge :: DebounceEdge
DI.debounceEdge = DebounceEdge
DI.leadingEdge
, debounceThreadName :: String
DI.debounceThreadName = String
"Debounce"
}
mkDebounce :: MonadUnliftIO m => DI.DebounceSettings m -> m (m ())
mkDebounce :: forall (m :: * -> *).
MonadUnliftIO m =>
DebounceSettings m -> m (m ())
mkDebounce DebounceSettings m
settings = do
MVar ()
baton <- forall (m :: * -> *) a. MonadIO m => a -> m (MVar a)
newMVar ()
forall (m :: * -> *).
MonadUnliftIO m =>
MVar () -> (Int -> m ()) -> DebounceSettings m -> m (m ())
DI.mkDebounceInternal MVar ()
baton forall (m :: * -> *). MonadIO m => Int -> m ()
threadDelay DebounceSettings m
settings