{-
 -      ``Control/Monad/Event''
 -      (c) 2008 Cook, J. MR  SSD, Inc.
 -}

module Control.Monad.Event
        ( module Control.Monad.Event
        
        , module Control.Monad.Event.BasicEvents
        , module Control.Monad.Event.Classes
        , module Control.Monad.EventT
        
        , module Control.Monad.Event.Internal.Types
        ) where

import Control.Monad.Event.BasicEvents
import Control.Monad.Event.Classes
import Control.Monad.EventT

import Control.Monad.Event.Internal.Types

-- |schedule an event at an absolute time (see 'scheduleEventIn')
scheduleEventAt :: (ScheduleEvent m t e, Num t) => t -> e -> m EventID
scheduleEventAt t e = do
        now <- getCurrentTime
        let dt = t - now
        
        scheduleEventIn dt e

-- |retry the currently-executing event at an absolute time (see 'retryEventIn')
retryEventAt :: (RetryEvent m t, Num t)
     => t -> m EventID
retryEventAt t = do
        now <- getCurrentTime
        let dt = t - now
        
        retryEventIn dt