{- | Main Datatype to hold information about a job, and function to calculate thread delay -} module TinyScheduler.Jobs ( Job(..) , makeJob , timeAtomToJob ) where import Data.Time import Prelude hiding (id) import TinyScheduler.Time import TinyScheduler.TimeAtom import TinyScheduler.Utils (calculateDelay) -- | Main datatype to hold job Information data Job a = Job { id :: Int , delay :: UTCTime -> [Int] , job :: IO a } -- | Convert time atom to Job timeAtomToJob :: Int -> IO a -> UTCTime -> TimeAtom -> Job a timeAtomToJob id job start atom = Job {id = id, delay = (delay_ atom start), job = job} -- | Function to generate job from information about id, no of hits, interval -- | startTine and the a function with side effects makeJob :: Int -> Int -> Interval -> UTCTime -> IO a -> Job a makeJob id hits interval startTime job = Job id (calculateDelay interval hits startTime) job