The control-event package provides the capability to schedule and cancel IO () actions for arbitrary absolute times.
A shim module that provides identical API as control-timeout (relative expiration times) is available, though it is also much less efficient then either control-timeout or control-event with absolute times.
Code generally looks like this:
import Control.Monad import Control.Event main = do evtSys <- initEventSystem ... doStuff action delay race evtSys doStuff action delay race eS = (TOD sec ps) <- getClockTime eid <- addEvent eS (TOD (sec + delay) ps) action res <- race when res (cancelEvent eS eid) runUserOperation a
The test code can serve as a decent example as well.
Potential Future Changes
- While no work is planned, if someone were looking for a quick project then they could move this package over to the 'time' packages and eliminate the 'old-time' dependency.