[Haskell-beginners] error handling approaches

Michael Litchard michael at schmong.org
Mon Sep 12 02:08:29 CEST 2011


I bring this to the mailing list because the only idea I can think of
is a cascading case statement. That can't be the best option.

On Sun, Sep 11, 2011 at 4:48 PM, Michael Litchard <michael at schmong.org> wrote:
> 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.
>



More information about the Beginners mailing list