diff --git a/ghc/lib/exts/IOExts.lhs b/ghc/lib/exts/IOExts.lhs index 04f539d43a38c3ef1c506782f6038e4c7d68b4d3..b973fa6fa0f9882402880174129606550ed5d803 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}