[project @ 2002-06-13 23:26:55 by sof]
authorsof <unknown>
Thu, 13 Jun 2002 23:26:56 +0000 (23:26 +0000)
committersof <unknown>
Thu, 13 Jun 2002 23:26:56 +0000 (23:26 +0000)
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
Data/STRef/Lazy.hs [new file with mode: 0644]
Data/STRef/Strict.hs [new file with mode: 0644]
Makefile

index 81b1351..336a61f 100644 (file)
@@ -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 (file)
index 0000000..daa48a0
--- /dev/null
@@ -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 (file)
index 0000000..ee432f4
--- /dev/null
@@ -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
index fab55a2..8c6aab2 100644 (file)
--- 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 \