module TinyScheduler.SubJobs ( convertJobIntoSubJobs , execSubJobs ) where import Control.Concurrent import Control.Concurrent.Async import Data.Time import TinyScheduler.Jobs import Prelude hiding (id) data SubJob a = SubJob { jobId :: Int , subJobNo :: Int , delayx :: Int , job_ :: IO a } -- | Converts each hit of a job into a Subjob convertJobIntoSubJobs :: UTCTime -> Job a -> [SubJob a] convertJobIntoSubJobs currentTime x = let timeDelays = (delay x currentTime) zippedDelays = zip [1 ..] timeDelays in map (\(i, z) -> SubJob (id x) i z (job x)) zippedDelays execSubJob :: SubJob a -> IO a execSubJob x = threadDelay (delayx x) >> (job_ x) execSubJobs :: [SubJob a] -> IO [a] execSubJobs = mapConcurrently execSubJob