From 1819f73fc5bb82bf8e2a57905edfde81017d9167 Mon Sep 17 00:00:00 2001 From: sof Date: Thu, 13 Jun 2002 23:26:56 +0000 Subject: [PATCH] [project @ 2002-06-13 23:26:55 by sof] Provide STRefs over both lazy and strict ST monads as, Data.STRef.Lazy Data.STRef.Strict Data.STRef <-- the strict version. i.e., mirror how the strict and lazy ST monads are organised over in Control.Monad.ST --- Data/STRef.hs | 2 +- Data/STRef/Lazy.hs | 37 +++++++++++++++++++++++++++++++++++++ Data/STRef/Strict.hs | 20 ++++++++++++++++++++ Makefile | 3 ++- 4 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 Data/STRef/Lazy.hs create mode 100644 Data/STRef/Strict.hs diff --git a/Data/STRef.hs b/Data/STRef.hs index 81b1351..336a61f 100644 --- a/Data/STRef.hs +++ b/Data/STRef.hs @@ -8,7 +8,7 @@ -- Stability : experimental -- Portability : non-portable (requires non-portable module ST) -- --- Mutable references in the ST monad. +-- Mutable references in the (strict) ST monad. -- ----------------------------------------------------------------------------- diff --git a/Data/STRef/Lazy.hs b/Data/STRef/Lazy.hs new file mode 100644 index 0000000..daa48a0 --- /dev/null +++ b/Data/STRef/Lazy.hs @@ -0,0 +1,37 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Data.STRef.Lazy +-- Copyright : (c) The University of Glasgow 2001 +-- License : BSD-style (see the file libraries/base/LICENSE) +-- +-- Maintainer : libraries@haskell.org +-- Stability : experimental +-- Portability : non-portable (requires non-portable module ST) +-- +-- Mutable references in the lazy ST monad. +-- +----------------------------------------------------------------------------- +module Data.STRef.Lazy ( + -- * STRefs + ST.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 Control.Monad.ST.Lazy +import qualified Data.STRef as ST +import qualified Control.Monad.ST as ST + +newSTRef :: a -> ST s (ST.STRef s a) +readSTRef :: ST.STRef s a -> ST s a +writeSTRef :: ST.STRef s a -> a -> ST s () +modifySTRef :: ST.STRef s a -> (a -> a) -> ST s () + +newSTRef = strictToLazyST . ST.newSTRef +readSTRef = strictToLazyST . ST.readSTRef +writeSTRef r a = strictToLazyST (ST.writeSTRef r a) +modifySTRef r f = strictToLazyST (ST.modifySTRef r f) + + diff --git a/Data/STRef/Strict.hs b/Data/STRef/Strict.hs new file mode 100644 index 0000000..ee432f4 --- /dev/null +++ b/Data/STRef/Strict.hs @@ -0,0 +1,20 @@ +----------------------------------------------------------------------------- +-- | +-- Module : Data.STRef.Strict +-- Copyright : (c) The University of Glasgow 2001 +-- License : BSD-style (see the file libraries/base/LICENSE) +-- +-- Maintainer : libraries@haskell.org +-- Stability : provisional +-- Portability : non-portable (requires universal quantification for runST) +-- +-- Mutable references in the (strict) ST monad (re-export of "Data.STRef") +-- +----------------------------------------------------------------------------- + +module Data.STRef.Strict ( + module Data.STRef + ) where + +import Prelude +import Data.STRef diff --git a/Makefile b/Makefile index fab55a2..8c6aab2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # ----------------------------------------------------------------------------- -# $Id: Makefile,v 1.31 2002/06/08 13:11:27 panne Exp $ +# $Id: Makefile,v 1.32 2002/06/13 23:26:55 sof Exp $ TOP=.. include $(TOP)/mk/boilerplate.mk @@ -15,6 +15,7 @@ ALL_DIRS = \ Control/Monad/ST \ Data \ Data/Array \ + Data/STRef \ Database \ Debug \ Debug/QuickCheck \ -- 1.7.10.4