X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FSTRef.hs;h=288cbe778fd6db86bd16576e36dace138524f8a4;hb=258f37c7ef4af4c1ac1e9bf6dfedb53dd8a4c0e9;hp=b3c4888ad18a56376ef79313cb91bf51990396d8;hpb=9fa9bc17072a58c0bae2cce4764d38677e96ac29;p=ghc-base.git diff --git a/Data/STRef.hs b/Data/STRef.hs index b3c4888..288cbe7 100644 --- a/Data/STRef.hs +++ b/Data/STRef.hs @@ -2,33 +2,40 @@ -- | -- 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) +-- Portability : non-portable (uses Control.Monad.ST) -- --- $Id: STRef.hs,v 1.4 2002/04/24 16:31:40 simonmar Exp $ --- --- Mutable references in the ST monad. +-- Mutable references in the (strict) ST monad. -- ----------------------------------------------------------------------------- module Data.STRef ( - 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 () - modifySTRef -- :: STRef s a -> (a -> a) -> ST s () + -- * 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 () + 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 +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