X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Flib%2Fexts%2FIOExts.lhs;h=b973fa6fa0f9882402880174129606550ed5d803;hb=b7ffad2a80db06fa106c7ae6e9090ad117b5bc3c;hp=04f539d43a38c3ef1c506782f6038e4c7d68b4d3;hpb=3c40d60230391949db9de4f1ffe3b8a61ce72090;p=ghc-hetmet.git diff --git a/ghc/lib/exts/IOExts.lhs b/ghc/lib/exts/IOExts.lhs index 04f539d..b973fa6 100644 --- a/ghc/lib/exts/IOExts.lhs +++ b/ghc/lib/exts/IOExts.lhs @@ -23,6 +23,8 @@ module IOExts , readIORef , writeIORef + , mkWeakIORef + , IOArray -- instance of: Eq , newIOArray , boundsIOArray @@ -71,6 +73,7 @@ import PrelHandle ( openFileEx, IOModeEx(..), ) import PrelST import PrelArr +import PrelWeak import PrelGHC import PrelHandle import PrelErr @@ -109,6 +112,10 @@ newIORef v = stToIO (newVar v) >>= \ var -> return (IORef var) readIORef (IORef var) = stToIO (readVar var) writeIORef (IORef var) v = stToIO (writeVar var v) #endif + +mkWeakIORef :: IORef a -> IO () -> IO (Weak (IORef a)) +mkWeakIORef r@(IORef (MutableVar r#)) f = IO $ \s -> + case mkWeak# r# r f s of (# s1, w #) -> (# s1, Weak w #) \end{code} \begin{code}