packages feed

event-monad-0.0.1.0: src/Control/Monad/Event/Classes.hs-boot

{-
 -      ``Control/Monad/Event/Classes''
 -}
{-# LANGUAGE
        MultiParamTypeClasses,
        FunctionalDependencies,
        KindSignatures
  #-}

module Control.Monad.Event.Classes where

import Control.Monad.Event.Internal.EventID

class Monad m => MonadTime m t | m -> t where
    getCurrentTime :: m t

class MonadEvent (m :: * -> *) e | e -> m
class (MonadEvent m e, MonadTime m t) => ScheduleEvent m t e | m -> t
    where
        scheduleEventAt :: t -> e -> m EventID
        doNext :: e -> m ()
        doNext e = do
            now <- getCurrentTime
            scheduleEventAt now e
            return ()