[project @ 1997-03-14 05:24:00 by sof]
[ghc-hetmet.git] / ghc / lib / glaExts / MutVar.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994-1996
3 %
4 \section[MutVar]{Mutable variables}
5
6 Mutable variables, for the @IO@ monad.
7
8 \begin{code}
9 module MutVar
10
11        (
12         MutVar,      -- abstract
13
14         newVar,      -- :: a -> IO (MutVar a)
15         readVar,     -- :: MutVar a -> IO a
16         writeVar,    -- :: MutVar a -> a -> IO ()
17         sameVar      -- :: MutVar a -> MutVar a -> Bool
18
19        ) where
20
21 import qualified ST
22 import qualified ArrBase
23 import IOBase ( IO , stToIO )
24 import GHC (RealWorld)
25
26 \end{code}
27
28 \begin{code}
29
30 newtype MutVar a = MutVar (ArrBase.MutableVar RealWorld a)
31
32 newVar :: a -> IO (MutVar a)
33 newVar v = stToIO (ST.newVar v) >>= \ var -> return (MutVar var)
34
35 readVar :: MutVar a -> IO a
36 readVar (MutVar var) = stToIO (ST.readVar var)
37
38 writeVar :: MutVar a -> a -> IO ()
39 writeVar (MutVar var) v = stToIO (ST.writeVar var v)
40
41 sameVar :: MutVar a -> MutVar a -> Bool
42 sameVar (MutVar var1) (MutVar var2) = ST.sameVar var1 var2
43
44 \end{code}