[project @ 1999-01-23 17:46:01 by sof]
authorsof <unknown>
Sat, 23 Jan 1999 17:46:01 +0000 (17:46 +0000)
committersof <unknown>
Sat, 23 Jan 1999 17:46:01 +0000 (17:46 +0000)
Move ST <--> IO coercion functions from IOExts to (Lazy)?ST

ghc/lib/exts/IOExts.lhs
ghc/lib/exts/LazyST.lhs
ghc/lib/exts/ST.lhs

index 5bbd8f0..612b37d 100644 (file)
@@ -48,8 +48,6 @@ module IOExts
 #endif
        
        , unsafePtrEq
-       , unsafeIOToST
-       , stToIO
 
         ) where
 
@@ -161,18 +159,6 @@ trace string expr = unsafePerformIO $ do
 #endif
 \end{code}
 
-\begin{code}
-unsafeIOToST      :: IO a -> ST s a
-#ifdef __HUGS__
-unsafeIOToST = primUnsafeCoerce
-#else
-unsafeIOToST (IO io) = ST $ \ s ->
-    case ((unsafeCoerce# io) s) of
-      (#  new_s, a #) -> unsafeCoerce# (STret new_s a)
---      IOfail new_s e -> error ("I/O Error (unsafeIOToST): " ++ showsPrec 0 e "\n")
-#endif
-\end{code}
-
 Not something you want to call normally, but useful
 in the cases where you do want to flush stuff out of
 the heap or make sure you've got room enough
index 07bf7a7..ee3925e 100644 (file)
@@ -26,6 +26,8 @@ module LazyST (
        thawSTArray, freezeSTArray, unsafeFreezeSTArray, 
        Ix,
 
+       ST.unsafeIOToST, ST.stToIO,
+
        strictToLazyST, lazyToStrictST
     ) where
 
@@ -80,6 +82,7 @@ writeSTRef :: ST.STRef s a -> a -> ST s ()
 newSTRef   = strictToLazyST . ST.newSTRef
 readSTRef  = strictToLazyST . ST.readSTRef
 writeSTRef r a = strictToLazyST (ST.writeSTRef r a)
+
 \end{code}
 
 %*********************************************************
index 5a52131..e7d6fc8 100644 (file)
@@ -21,6 +21,8 @@ module ST (
        STRef,
        newSTRef, readSTRef, writeSTRef,
 
+       unsafeIOToST, stToIO,
+
        STArray,
        newSTArray, readSTArray, writeSTArray, boundsSTArray, 
        thawSTArray, freezeSTArray, unsafeFreezeSTArray, 
@@ -37,7 +39,8 @@ import PreludeBuiltin
 #else
 import PrelArr
 import PrelST
-import PrelBase        ( Eq(..), Int, Bool, ($), ()(..) )
+import PrelBase        ( Eq(..), Int, Bool, ($), ()(..), unsafeCoerce# )
+import PrelIOBase ( IO(..), stToIO )
 #endif
 import Monad
 import Ix
@@ -149,3 +152,15 @@ unsafeFreezeSTArray (STArray arr) = unsafeFreezeArray arr
 #endif
 \end{code}
 
+
+\begin{code}
+unsafeIOToST      :: IO a -> ST s a
+#ifdef __HUGS__
+unsafeIOToST = primUnsafeCoerce
+#else
+unsafeIOToST (IO io) = ST $ \ s ->
+    case ((unsafeCoerce# io) s) of
+      (#  new_s, a #) -> unsafeCoerce# (STret new_s a)
+--      IOfail new_s e -> error ("I/O Error (unsafeIOToST): " ++ showsPrec 0 e "\n")
+#endif
+\end{code}