Don't depend on Prelude (#4123)
[ghc-base.git] / Control / Concurrent / MVar.hs
index d3ff324..352d01e 100644 (file)
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -XNoImplicitPrelude #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Concurrent.MVar
@@ -40,13 +41,18 @@ import Hugs.ConcBase ( MVar, newEmptyMVar, newMVar, takeMVar, putMVar,
 #endif
 
 #ifdef __GLASGOW_HASKELL__
-import GHC.Conc ( MVar, newEmptyMVar, newMVar, takeMVar, putMVar,
+import GHC.MVar ( MVar, newEmptyMVar, newMVar, takeMVar, putMVar,
                   tryTakeMVar, tryPutMVar, isEmptyMVar, addMVarFinalizer
                 )
 #endif
 
+#ifdef __GLASGOW_HASKELL__
+import GHC.Base
+#else
 import Prelude
-import Control.Exception as Exception
+#endif
+
+import Control.Exception.Base
 
 {-|
   This is a combination of 'takeMVar' and 'putMVar'; ie. it takes the value
@@ -85,8 +91,7 @@ withMVar :: MVar a -> (a -> IO b) -> IO b
 withMVar m io =
   block $ do
     a <- takeMVar m
-    b <- Exception.catch (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 +105,7 @@ modifyMVar_ :: MVar a -> (a -> IO a) -> IO ()
 modifyMVar_ m io =
   block $ do
     a  <- takeMVar m
-    a' <- Exception.catch (unblock (io a))
-            (\e -> do putMVar m a; throw e)
+    a' <- unblock (io a) `onException` putMVar m a
     putMVar m a'
 
 {-|
@@ -113,7 +117,6 @@ modifyMVar :: MVar a -> (a -> IO (a,b)) -> IO b
 modifyMVar m io =
   block $ do
     a      <- takeMVar m
-    (a',b) <- Exception.catch (unblock (io a))
-                (\e -> do putMVar m a; throw e)
+    (a',b) <- unblock (io a) `onException` putMVar m a
     putMVar m a'
     return b