X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FSTRef.hs;h=3edfb871ae33310be20c2fe330e45b6b3438ef5d;hb=99a329d9b272925dcdf474ce2369e9421b51e51c;hp=747d5baad330b4fd90c53f19add570c39263edc7;hpb=5545727d5a6a1fc6d5d00f32a92a8fdf0fb7ca77;p=ghc-base.git diff --git a/Data/STRef.hs b/Data/STRef.hs index 747d5ba..3edfb87 100644 --- a/Data/STRef.hs +++ b/Data/STRef.hs @@ -1,33 +1,42 @@ ----------------------------------------------------------------------------- --- +-- | -- Module : Data.STRef -- Copyright : (c) The University of Glasgow 2001 --- License : BSD-style (see the file libraries/core/LICENSE) +-- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : experimental -- Portability : non-portable (requires non-portable module ST) -- --- $Id: STRef.hs,v 1.2 2001/07/03 11:37:50 simonmar Exp $ --- --- 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 - writeSTRef -- :: STRef s a -> a -> ST s () + writeSTRef, -- :: STRef s a -> a -> ST s () + modifySTRef -- :: STRef s a -> (a -> a) -> ST s () ) where import Prelude #ifdef __GLASGOW_HASKELL__ +import GHC.ST import GHC.STRef #endif -import Data.Dynamic +#ifdef __HUGS__ +import Hugs.ST +#endif -#include "Dynamic.h" +import Data.Typeable + +#include "Typeable.h" INSTANCE_TYPEABLE2(STRef,stRefTc,"STRef") + +-- |Mutate the contents of an 'STRef' +modifySTRef :: STRef s a -> (a -> a) -> ST s () +modifySTRef ref f = writeSTRef ref . f =<< readSTRef ref