Asynchronous Exceptions

Steinitz, Dominic J
23 Nov 2001 08:23:51 Z

Can someone help me understand how this works? I've been reading the paper "Asynchronous Exceptions in Haskell". This gives a combinator

finally :: IO a -> IO b -> IO s

finally a b = 
   block (do {
      r <- catch (unblock a) (\e -> do { b; throw e });
      return r; })

Now suppose we have

finally (putStrLn "Test Started") (putStrLn "Test Terminated")

then looking at the semantics, putStrLn can become stuck and therefore can be interrupted. So the interrupt could occur whilst "Test Terminated" is being output and we could end up with

Test Started
Test Term

Is this what could happen? If so, is there a way of making sure that "Test Terminated" is output?


To receive our special fares directly by email, register at