Copyright | (c) Andrew Rademacher 2014 |
---|---|
License | MIT |
Maintainer | Andrew Rademacher <andrewrademacher@gmail.com> |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
main :: IO () main = do ... tids <- execSchedule $ do addJob job1 "* * * * *" addJob job2 "0 * * * *" print tids ... job1 :: IO () job1 = putStrLn "Job 1" job2 :: IO () job2 = putStrLn "Job 2"
- data Job = Job CronSchedule (IO ())
- data ScheduleError = ParseError String
- type Schedule = ScheduleT Identity
- newtype ScheduleT m a = ScheduleT {
- unSchedule :: StateT Jobs (ExceptT ScheduleError m) a
- class MonadSchedule m where
- runSchedule :: Schedule a -> Either ScheduleError (a, [Job])
- runScheduleT :: ScheduleT m a -> m (Either ScheduleError (a, [Job]))
- execSchedule :: Schedule () -> IO [ThreadId]
Documentation
data ScheduleError Source
Show ScheduleError | |
Monad m => MonadError ScheduleError (ScheduleT m) |
ScheduleT | |
|
class MonadSchedule m where Source
Monad m => MonadSchedule (ScheduleT m) |
runSchedule :: Schedule a -> Either ScheduleError (a, [Job]) Source
runScheduleT :: ScheduleT m a -> m (Either ScheduleError (a, [Job])) Source
execSchedule :: Schedule () -> IO [ThreadId] Source
Schedule all of the jobs to run at appropriate intervals. Each job that is launched gets a scheduling thread to itself. Each time a scheduling thread launches a job, the job is forked onto a new thread. This means that if a job throws an excpetion in IO, its thread will be killed, but it will continue to be scheduled in the future.