From 6a515e8907437ffe632b4e440063075e3325c4e8 Mon Sep 17 00:00:00 2001 From: simonm Date: Mon, 24 Nov 1997 15:43:22 +0000 Subject: [PATCH] [project @ 1997-11-24 15:43:22 by simonm] implement STArray using newtype instead of type. --- ghc/lib/glaExts/ST.lhs | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/ghc/lib/glaExts/ST.lhs b/ghc/lib/glaExts/ST.lhs index ed3474d..6c0efba 100644 --- a/ghc/lib/glaExts/ST.lhs +++ b/ghc/lib/glaExts/ST.lhs @@ -42,7 +42,8 @@ import Ix %********************************************************* \begin{code} -newtype STRef s a = STRef (MutableVar s a) deriving Eq +newtype STRef s a = STRef (MutableVar s a) + deriving Eq newSTRef :: a -> ST s (STRef s a) newSTRef v = newVar v >>= \ var -> return (STRef var) @@ -61,7 +62,8 @@ writeSTRef (STRef var) v = writeVar var v %********************************************************* \begin{code} -type STArray s ix elt = MutableArray s ix elt +newtype STArray s ix elt = STArray (MutableArray s ix elt) + deriving Eq newSTArray :: Ix ix => (ix,ix) -> elt -> ST s (STArray s ix elt) writeSTArray :: Ix ix => STArray s ix elt -> ix -> elt -> ST s () @@ -71,12 +73,20 @@ thawSTArray :: Ix ix => Array ix elt -> ST s (STArray s ix elt) freezeSTArray :: Ix ix => STArray s ix elt -> ST s (Array ix elt) unsafeFreezeSTArray :: Ix ix => STArray s ix elt -> ST s (Array ix elt) -newSTArray = newArray -boundsSTArray = boundsOfArray -readSTArray = readArray -writeSTArray = writeArray -thawSTArray = thawArray -freezeSTArray = freezeArray -unsafeFreezeSTArray = unsafeFreezeArray +newSTArray ixs elt = + newArray ixs elt >>= \arr -> + return (STArray arr) + +boundsSTArray (STArray arr) = boundsOfArray arr + +readSTArray (STArray arr) ix = readArray arr ix + +writeSTArray (STArray arr) ix elt = writeArray arr ix elt + +thawSTArray arr = thawArray arr >>= \starr -> return (STArray starr) + +freezeSTArray (STArray arr) = freezeArray arr + +unsafeFreezeSTArray (STArray arr) = unsafeFreezeArray arr \end{code} - + -- 1.7.10.4