module System.Timeout.Event where
import qualified GHC.Event
data TimerManager2 a = TimerManager2
{ timerManager :: a
, registerTimeout :: a -> Int -> GHC.Event.TimeoutCallback -> IO GHC.Event.TimeoutKey
, updateTimeout2 :: a -> GHC.Event.TimeoutKey -> Int -> IO ()
, unregisterTimeout :: a -> GHC.Event.TimeoutKey -> IO ()
}
data SomeTimerManager2 where
SomeTimerManager2 :: TimerManager2 a -> SomeTimerManager2
newTimeoutManager2 :: IO SomeTimerManager2
newTimeoutManager2 = do
tm <- GHC.Event.getSystemTimerManager
return $! (SomeTimerManager2 (TimerManager2 tm GHC.Event.registerTimeout GHC.Event.updateTimeout GHC.Event.unregisterTimeout))
withTimeoutManager2 :: forall r . (forall a . TimerManager2 a -> IO r) -> IO r
withTimeoutManager2 f = do
SomeTimerManager2 tm' <- newTimeoutManager2
f tm'