[project @ 2000-10-02 11:06:19 by simonmar]
authorsimonmar <unknown>
Mon, 2 Oct 2000 11:06:19 +0000 (11:06 +0000)
committersimonmar <unknown>
Mon, 2 Oct 2000 11:06:19 +0000 (11:06 +0000)
- move readMVar and swapMVar from PrelConc to concurrent

- add the following exception-safe MVar operations:

withMVar    :: MVar a -> (a -> IO b) -> IO b
modifyMVar  :: MVar a -> (a -> IO (a,b)) -> IO b
modifyMVar_ :: MVar a -> (a -> IO a) -> IO ()

- re-implement readMVar and swapMVar in an exception-safe way.

- re-implement the Chan operations using withMVar et al.

ghc/lib/std/PrelConc.lhs

index 4594a6b..7ad1038 100644 (file)
@@ -1,5 +1,5 @@
 % -----------------------------------------------------------------------------
-% $Id: PrelConc.lhs,v 1.20 2000/07/07 11:03:58 simonmar Exp $
+% $Id: PrelConc.lhs,v 1.21 2000/10/02 11:06:19 simonmar Exp $
 %
 % (c) The University of Glasgow, 1994-2000
 %
@@ -33,8 +33,6 @@ module PrelConc
        , newEmptyMVar  -- :: IO (MVar a)
        , takeMVar      -- :: MVar a -> IO a
        , putMVar       -- :: MVar a -> a -> IO ()
-       , readMVar      -- :: MVar a -> IO a
-       , swapMVar      -- :: MVar a -> a -> IO a
        , tryTakeMVar   -- :: MVar a -> IO (Maybe a)
        , isEmptyMVar   -- :: MVar a -> IO Bool
 
@@ -136,18 +134,6 @@ newMVar value =
     putMVar mvar value >>
     return mvar
 
-readMVar :: MVar a -> IO a
-readMVar mvar =
-    takeMVar mvar      >>= \ value ->
-    putMVar mvar value >>
-    return value
-
-swapMVar :: MVar a -> a -> IO a
-swapMVar mvar new =
-    takeMVar mvar      >>= \ old ->
-    putMVar mvar new   >>
-    return old
-
 -- tryTakeMVar is a non-blocking takeMVar
 tryTakeMVar :: MVar a -> IO (Maybe a)
 tryTakeMVar (MVar m) = IO $ \ s ->