{-# LANGUAGE DeriveGeneric, DeriveAnyClass #-} module Eventloop.Module.Timer.Types where import GHC.Generics (Generic) import Control.DeepSeq import Control.Concurrent.Datastructures.BlockingConcurrentQueue import Control.Concurrent.Timer import Control.Concurrent.Suspend.Lifted type MicroSecondDelay = Int -- Microseconds type TimerId = [Char] type TickBuffer = BlockingConcurrentQueue TimerIn type StartedTimer = (TimerId, TimerIO) type TimerStartFunction = (TimerIO -> IO () -> Delay -> IO Bool) data TimerIn = Tick TimerId deriving (Eq, Show) data TimerOut = SetTimer TimerId MicroSecondDelay | SetIntervalTimer TimerId MicroSecondDelay | UnsetTimer TimerId deriving (Eq, Show, Generic, NFData)