[project @ 1998-04-07 07:51:07 by simonpj]
[ghc-hetmet.git] / ghc / lib / exts / IOExts.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994-1996
3 %
4
5 \section[IOExts]{Module @IOExts@}
6
7 \begin{code}
8 {-# OPTIONS -fno-implicit-prelude #-}
9
10 module IOExts
11         ( fixIO
12         , unsafePerformIO
13         , unsafeInterleaveIO
14
15         , IORef
16           -- instance Eq (IORef a)
17         , newIORef
18         , readIORef
19         , writeIORef
20
21         , IOArray
22           -- instance Eq (IOArray ix a)
23         , newIOArray
24         , boundsIOArray
25         , readIOArray
26         , writeIOArray
27         , freezeIOArray
28         
29         , openFileEx
30         , IOModeEx(..)
31
32 --        , setEcho
33 --      , getEcho
34
35         , trace
36         , performGC
37         
38         , reallyUnsafePtrEq
39         ) where
40 \end{code}
41
42 \begin{code}
43 import PrelBase
44 import PrelIOBase
45 import PrelHandle ( openFileEx, IOModeEx(..) )
46 import PrelST
47 import PrelUnsafe
48 import PrelArr
49 import PrelGHC
50 import Ix
51
52 reallyUnsafePtrEq a b =
53     case reallyUnsafePtrEquality# a b of
54          0# -> False
55          _  -> True
56 \end{code}
57
58 \begin{code}
59 newtype IORef a = IORef (MutableVar RealWorld a) 
60     deriving Eq
61
62 newIORef :: a -> IO (IORef a)
63 newIORef v = stToIO (newVar v) >>= \ var -> return (IORef var)
64
65 readIORef :: IORef a -> IO a
66 readIORef (IORef var) = stToIO (readVar var)
67
68 writeIORef :: IORef a -> a -> IO ()
69 writeIORef (IORef var) v = stToIO (writeVar var v)
70 \end{code}
71
72 \begin{code}
73 newtype IOArray ix elt = IOArray (MutableArray RealWorld ix elt)
74     deriving Eq
75
76 newIOArray          :: Ix ix => (ix,ix) -> elt -> IO (IOArray ix elt)
77 boundsIOArray       :: Ix ix => IOArray ix elt -> (ix, ix)
78 readIOArray         :: Ix ix => IOArray ix elt -> ix -> IO elt
79 writeIOArray        :: Ix ix => IOArray ix elt -> ix -> elt -> IO ()
80 freezeIOArray       :: Ix ix => IOArray ix elt -> IO (Array ix elt)
81
82 newIOArray ixs elt = 
83     stToIO (newArray ixs elt) >>= \arr -> 
84     return (IOArray arr)
85
86 boundsIOArray (IOArray arr) = boundsOfArray arr
87
88 readIOArray (IOArray arr) ix = stToIO (readArray arr ix)
89
90 writeIOArray (IOArray arr) ix elt = stToIO (writeArray arr ix elt)
91
92 freezeIOArray (IOArray arr) = stToIO (freezeArray arr)
93 \end{code}
94
95 begin{code}
96 setEcho :: Handle -> Bool -> IO ()
97 setEcho 
98
99 getEcho :: Handle -> IO Bool
100 end{code}