
Here's the gist of the code I am looking to incorporate error handling into
worldHandler :: ProcessState -> JobCount -> IO () worldHandler world jCount = do putStrLn "Entered worldHandler" jcount <- takeMVar jCount if jcount > 0 then incrementThenDone jcount else doJobProcessing jcount where incrementThenDone jcount = do putMVar jCount (jcount+1)
doJobProcessing jcount = do putMVar jCount (jcount+1) preProcess world initiateJob world makeChart world
Here's main
main :: IO () main = do world <- (newEmptyMVar :: IO ProcessState) jCount <- (newMVar 0 :: IO JobCount) installHandler userDefinedSignal1 (Catch $ worldHandler world jCount) Nothing forever (threadDelay 10000)
the functions preProcess, initiateJob, and makeChart is where I need be concerned with errors. The idea is that if any of those functions fail, I decrement jCount. call logError, and continue waiting for the next signal. each of these functions will be starting another process, readProcessWithExitCode looks like what I want. I will then use the exit code to determine success or failure. General ideas about how to approach this, and any questions that come to mind would be appreciated.