Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Device for running an action at (i.e. shortly after) a certain time, which can be used to implement things like time-based cache expiry.
This implementation avoids the use of polling and leans on Haskell's scheduler to achieve low-latency without lots of computational overhead.
The alarm can be set multiple times, and in this case the alarm will go off at the earliest requested time. If the alarm is set in the past, the action will run immediately. When the action runs, it clears all future alarms; the action can itself return the time at which it should run again.
To perform time-based cache expiry, create an AlarmClock
whose action flushes
any stale entries from the cache and returns the next time that an entry will
expire. If the cache contains no entries that will expire, return Nothing
from the alarm action. When expiring entries are added to the cache, call
setAlarm
to ensure that they will expire in a timely fashion.
- data AlarmClock
- newAlarmClock :: IO (Maybe UTCTime) -> IO AlarmClock
- destroyAlarmClock :: AlarmClock -> IO ()
- setAlarm :: AlarmClock -> UTCTime -> IO ()
- setAlarmNow :: AlarmClock -> IO ()
Documentation
data AlarmClock Source
An AlarmClock
is a device for running an action at (or shortly after) a certain time.
:: IO (Maybe UTCTime) | Action to run when the alarm goes off. The return value, if |
-> IO AlarmClock |
Create a new AlarmClock
that runs the given action. Initially, there is
no wakeup time set: you must call setAlarm
for anything else to happen.
destroyAlarmClock :: AlarmClock -> IO () Source
Destroy the AlarmClock
so no further alarms will occur. If a wakeup is in
progress then it will run to completion.
setAlarm :: AlarmClock -> UTCTime -> IO () Source
Make the AlarmClock
go off at (or shortly after) the given time. This
can be called more than once; in which case, the alarm will go off at the
earliest given time.
setAlarmNow :: AlarmClock -> IO () Source
Make the AlarmClock
go off right now.