{- - ``Control/Monad/Event/Internal/Types'' -} {-# LANGUAGE ExistentialQuantification, KindSignatures #-} module Control.Monad.Event.Internal.Types ( module Control.Monad.Event.Internal.Types , module Control.Monad.Event.Internal.EventID ) where import {-# SOURCE #-} Control.Monad.Event.Classes import Control.Monad.Event.Internal.EventID import Text.Printf -- for the benefit of haddock import Data.Typeable -- | An existential wrapper containing an event which can be executed in the -- monad 'm'. -- -- I would like to existentially quantify the time parameter too, since it's -- uniquely determined according to the functional dependencies of 'MonadTime', -- but GHC doesn't unify it with its actual type in pattern matches - I was -- not able to use it as a 'PrintfArg' in: -- -- > instance MonadEvent (EventT Double IO) (EventDescriptor (EventT Double IO)) data EventDescriptor (m :: * -> *) t = forall e. ScheduleEvent m t e => EventDescriptor { eventId :: EventID , eventTime :: t , event :: e } tyCon_EventDescriptor = mkTyCon "Control.Monad.Event.Internal.Types.EventDescriptor" instance Typeable1 m => Typeable1 (EventDescriptor m) where typeOf1 y = mkTyConApp tyCon_EventDescriptor [typeOf1 ((undefined :: EventDescriptor m t -> m ()) y)]