{- - ``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 ()