Use onException rather than catchAny
authorIan Lynagh <igloo@earth.li>
Sun, 3 Aug 2008 11:41:04 +0000 (11:41 +0000)
committerIan Lynagh <igloo@earth.li>
Sun, 3 Aug 2008 11:41:04 +0000 (11:41 +0000)
Control/Concurrent/MVar.hs

index 6afdc97..d4a1a48 100644 (file)
@@ -85,8 +85,7 @@ withMVar :: MVar a -> (a -> IO b) -> IO b
 withMVar m io =
   block $ do
     a <- takeMVar m
-    b <- catchAny (unblock (io a))
-            (\e -> do putMVar m a; throw e)
+    b <- unblock (io a) `onException` putMVar m a
     putMVar m a
     return b
 
@@ -100,8 +99,7 @@ modifyMVar_ :: MVar a -> (a -> IO a) -> IO ()
 modifyMVar_ m io =
   block $ do
     a  <- takeMVar m
-    a' <- catchAny (unblock (io a))
-            (\e -> do putMVar m a; throw e)
+    a' <- unblock (io a) `onException` putMVar m a
     putMVar m a'
 
 {-|
@@ -113,7 +111,6 @@ modifyMVar :: MVar a -> (a -> IO (a,b)) -> IO b
 modifyMVar m io =
   block $ do
     a      <- takeMVar m
-    (a',b) <- catchAny (unblock (io a))
-                (\e -> do putMVar m a; throw e)
+    (a',b) <- unblock (io a) `onException` putMVar m a
     putMVar m a'
     return b