From: simonm Date: Mon, 24 Nov 1997 15:42:47 +0000 (+0000) Subject: [project @ 1997-11-24 15:42:47 by simonm] X-Git-Tag: Approx_2487_patches~1283 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=9371efc106cba136266afa459bf58f716162a29e;p=ghc-hetmet.git [project @ 1997-11-24 15:42:47 by simonm] add IOArray and relevant operations. --- diff --git a/ghc/lib/glaExts/IOExts.lhs b/ghc/lib/glaExts/IOExts.lhs index 2246165..303de8c 100644 --- a/ghc/lib/glaExts/IOExts.lhs +++ b/ghc/lib/glaExts/IOExts.lhs @@ -13,11 +13,19 @@ module IOExts , unsafeInterleaveIO , IORef - -- instance Eq (MutVar a) + -- instance Eq (IORef a) , newIORef , readIORef , writeIORef + , IOArray + -- instance Eq (IOArray ix a) + , newIOArray + , boundsIOArray + , readIOArray + , writeIOArray + , freezeIOArray + , trace , performGC @@ -28,7 +36,6 @@ module IOExts \begin{code} import PrelBase import IOBase -import IORef import STBase import Unsafe import GHC @@ -37,4 +44,40 @@ reallyUnsafePtrEq a b = case reallyUnsafePtrEquality# a b of 0# -> False _ -> True + +\begin{code} +newtype IORef a = IORef (MutableVar RealWorld a) + deriving Eq + +newIORef :: a -> IO (IORef a) +newIORef v = stToIO (newVar v) >>= \ var -> return (IORef var) + +readIORef :: IORef a -> IO a +readIORef (IORef var) = stToIO (readVar var) + +writeIORef :: IORef a -> a -> IO () +writeIORef (IORef var) v = stToIO (writeVar var v) +\end{code} + +\begin{code} +newtype IOArray ix elt = IOArray (MutableArray RealWorld ix elt) + deriving Eq + +newIOArray :: Ix ix => (ix,ix) -> elt -> IO (IOArray ix elt) +boundsIOArray :: Ix ix => IOArray ix elt -> (ix, ix) +readIOArray :: Ix ix => IOArray ix elt -> ix -> IO elt +writeIOArray :: Ix ix => IOArray ix elt -> ix -> elt -> IO () +freezeIOArray :: Ix ix => IOArray ix elt -> IO (Array ix elt) + +newIOArray ixs elt = + stToIO (newArray ixs elt) >>= \arr -> + return (IOArray arr) + +boundsIOArray (IOArray arr) = boundsOfArray + +readIOArray (IOArray arr) ix = stToIO (readArray arr ix) + +writeIOArray (IOArray arr) ix elt = stToIO (writeArray arr ix elt) + +freezeIOArray (IOArray arr) = stToIO (freezeArray arr) \end{code}