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 }); b; 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? Dominic. ------------------------------------------------------------------------------------------------- To receive our special fares directly by email, register at http://www.britishairways.com/registration _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell