timers-0.2.0.0: src/Control/Concurrent/Timer/Types.hs
module Control.Concurrent.Timer.Types
( Timer(..)
, TimerImmutable(..)
) where
------------------------------------------------------------------------------
import Control.Concurrent (ThreadId)
import Control.Concurrent.MVar (MVar)
import Control.Concurrent.Suspend (Delay)
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- | The data type representing the timer.
-- For now, the action and delay are fixed for the lifetime of the Timer.
data Timer m = Timer
{ timerImmutable :: MVar (Maybe (TimerImmutable m)) -- ^ If the MVar is empty, someone if mutating the timer. If the MVar contains Nothing, the timer was not started/initialized.
}
data TimerImmutable m = TimerImmutable
{ timerAction :: m ()
, timerDelay :: Delay
, timerThreadID :: ThreadId
}