summaryrefslogtreecommitdiff
path: root/ghc/lib/glaExts/PreludeGlaST.lhs
diff options
context:
space:
mode:
authorpartain <unknown>1996-01-11 14:26:13 +0000
committerpartain <unknown>1996-01-11 14:26:13 +0000
commit10521d8418fd3a1cf32882718b5bd28992db36fd (patch)
tree09cb781a215d1ab0c871f9655c1460207a601497 /ghc/lib/glaExts/PreludeGlaST.lhs
parent7fa716e248a1f11fa686965f57aebbb83b74fa7b (diff)
downloadhaskell-10521d8418fd3a1cf32882718b5bd28992db36fd.tar.gz
[project @ 1996-01-11 14:06:51 by partain]
Diffstat (limited to 'ghc/lib/glaExts/PreludeGlaST.lhs')
-rw-r--r--ghc/lib/glaExts/PreludeGlaST.lhs20
1 files changed, 20 insertions, 0 deletions
diff --git a/ghc/lib/glaExts/PreludeGlaST.lhs b/ghc/lib/glaExts/PreludeGlaST.lhs
index a4db1d2f24..75d4f45a25 100644
--- a/ghc/lib/glaExts/PreludeGlaST.lhs
+++ b/ghc/lib/glaExts/PreludeGlaST.lhs
@@ -705,8 +705,28 @@ readVar :: MutableVar s a -> _ST s a
writeVar :: MutableVar s a -> a -> _ST s ()
sameVar :: MutableVar s a -> MutableVar s a -> Bool
+{- MUCH GRATUITOUS INEFFICIENCY: WDP 95/09:
+
newVar init s = newArray (0,0) init s
readVar v s = readArray v 0 s
writeVar v val s = writeArray v 0 val s
sameVar v1 v2 = sameMutableArray v1 v2
+-}
+
+newVar init (S# s#)
+ = case (newArray# 1# init s#) of { StateAndMutableArray# s2# arr# ->
+ (_MutableArray vAR_IXS arr#, S# s2#) }
+ where
+ vAR_IXS = error "Shouldn't access `bounds' of a MutableVar\n"
+
+readVar (_MutableArray _ var#) (S# s#)
+ = case readArray# var# 0# s# of { StateAndPtr# s2# r ->
+ (r, S# s2#) }
+
+writeVar (_MutableArray _ var#) val (S# s#)
+ = case writeArray# var# 0# val s# of { s2# ->
+ ((), S# s2#) }
+
+sameVar (_MutableArray _ var1#) (_MutableArray _ var2#)
+ = sameMutableArray# var1# var2#
\end{code}