X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FSTRef.hs;h=b185493a17756a4e344f64932ee31e59b3e97738;hb=1e61853dbd4b9fc6ecc58ad655990ea5e971fa13;hp=2331ef9d55a2d39689723b43206866f9811a36bf;hpb=f7a485978f04e84b086f1974b88887cc72d832d0;p=ghc-base.git diff --git a/Data/STRef.hs b/Data/STRef.hs index 2331ef9..b185493 100644 --- a/Data/STRef.hs +++ b/Data/STRef.hs @@ -8,11 +8,12 @@ -- Stability : experimental -- Portability : non-portable (requires non-portable module ST) -- --- Mutable references in the ST monad. +-- Mutable references in the (strict) ST monad. -- ----------------------------------------------------------------------------- module Data.STRef ( + -- * STRefs STRef, -- abstract, instance Eq newSTRef, -- :: a -> ST s (STRef s a) readSTRef, -- :: STRef s a -> ST s a @@ -23,10 +24,18 @@ module Data.STRef ( import Prelude #ifdef __GLASGOW_HASKELL__ +import GHC.ST import GHC.STRef #endif -import Data.Dynamic +#ifdef __HUGS__ +import Hugs.ST +import Data.Typeable -#include "Dynamic.h" +#include "Typeable.h" INSTANCE_TYPEABLE2(STRef,stRefTc,"STRef") +#endif + +-- |Mutate the contents of an 'STRef' +modifySTRef :: STRef s a -> (a -> a) -> ST s () +modifySTRef ref f = writeSTRef ref . f =<< readSTRef ref