úΤJRequires GHC 7+joeyadams3.14159@gmail.com Safe-Inferred A - is an updatable timer that rings only once.  Create a new 5 that will ring in the given number of microseconds. Set an existing - to ring in the given number of microseconds  (from the time . is called), rather than when it was going to  ring. If the  has already rung, do nothing. Set a  so it will never ring, even if  is used later.  If the  has already rung, do nothing. Block until the  rings. If the  has already rung,  return immediately. Non-blocking version of .  Return  if the  has rung. Faster version of  . . See  .  Since 0.1.1 Use the timeout API in  GHC.Event Use threads and threadDelay: init I Fork a thread to wait the given length of time, then set the TVar.  delayUpdate H Stop the existing thread and (unless the delay has been canceled)  fork a new thread.  delayCancel ( Stop the existing thread, if any. =Fork a thread to perform an action after the given number of  microseconds.   is non-interruptible.  Prevent the # from performing its action. If it' s too late,  return (. Otherwise, return an action (namely, ) for $ cleaning up the underlying thread.   has a nice property: it is non-interruptible. " This means that, in an exception mask#, it will not poll for exceptions.  See Control.Exception for more info.  However, the action returned by   does poll for  exceptions. That's why  ! returns this action rather than M simply doing it. This lets the caller do it outside of a critical section.          stm-delay-0.1.1Control.Concurrent.STM.DelayDelaynewDelay updateDelay cancelDelay waitDelay tryWaitDelaytryWaitDelayIOghc-prim GHC.TypesTruebase GHC.Conc.Sync atomically readTVarIO implEvent implThreadforkTimeoutThreadstopTimeoutThread TimeoutThread Data.MaybeNothing killThreaddelayVar delayUpdate delayCancel getDelayImpl replaceThreadcompat_forkIOUnmasked $fEqDelay