[Haskell-cafe] Tricky exception handling

Bulat Ziganshin bulatz at HotPOP.com
Mon Dec 12 06:29:47 EST 2005


Hello Joel,

your code is unreadable, inefficent and don't handle async exceptions
between calls to `handle`. as i already sayed you'd better to use:

handle (...)
  repeat_forever
    do cmd <- read h ssl
       post $! Cmd $! cmd



Monday, December 12, 2005, 12:30:27 PM, you wrote:

JR> Folks,

JR> I have a thread that launches socket reader and writer threads. My  
JR> intent is to notify the main thread when an exception is caught by  
JR> the reader/writer. Is this code proper?

JR> ---
JR> withException :: (Event a -> IO ())
JR>                   -> IO ()
JR>                   -> IO Bool
JR> withException post action =
JR>      handle (\e -> do case e of
JR>                         AsyncException ThreadKilled -> return ()
JR>                         _ -> post $ NetworkError e
JR>                       return False
JR>             ) $ do { action; return True }

JR> writeLoop :: (Event a -> IO ()) -> Handle -> (SSL, BIO, BIO) -> IO ()
JR> writeLoop post h ssl =
JR>      do go <- withException post $
JR>               do cmd <- read h ssl
JR>                  post $! Cmd $! cmd
JR>         when go $ writeLoop post h ssl
JR> ---

JR>         Thanks, Joel

JR> --
JR> http://wagerlabs.com/





JR> _______________________________________________
JR> Haskell-Cafe mailing list
JR> Haskell-Cafe at haskell.org
JR> http://www.haskell.org/mailman/listinfo/haskell-cafe



-- 
Best regards,
 Bulat                            mailto:bulatz at HotPOP.com





More information about the Haskell-Cafe mailing list