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