[project @ 1997-12-04 14:57:34 by simonm]
[ghc-hetmet.git] / ghc / lib / ghc / Unsafe.lhs
index 1da8e25..1a145af 100644 (file)
@@ -13,16 +13,13 @@ them to be inlined.
 module Unsafe
         ( unsafePerformIO, 
          unsafeInterleaveIO, 
-         unsafeInterleaveST,
          trace,
-         runST
         ) where
 \end{code}
 
 \begin{code}
 import PrelBase
 import IOBase
-import STBase
 import Addr
 import {-# SOURCE #-} Error ( error )
 \end{code}
@@ -59,52 +56,3 @@ trace string expr
     sTDERR = (``stderr'' :: Addr)
 \end{code}
 
-\begin{code}
-unsafeInterleaveST :: ST s a -> ST s a
-unsafeInterleaveST (ST m) = ST ( \ s ->
-    let
-       STret _ r = m s
-    in
-    STret s r)
-
-\end{code}
-
-Definition of runST
-~~~~~~~~~~~~~~~~~~~
-
-SLPJ 95/04: Why @runST@ must not have an unfolding; consider:
-\begin{verbatim}
-f x =
-  runST ( \ s -> let
-                   (a, s')  = newArray# 100 [] s
-                   (_, s'') = fill_in_array_or_something a x s'
-                 in
-                 freezeArray# a s'' )
-\end{verbatim}
-If we inline @runST@, we'll get:
-\begin{verbatim}
-f x = let
-       (a, s')  = newArray# 100 [] realWorld#{-NB-}
-       (_, s'') = fill_in_array_or_something a x s'
-      in
-      freezeArray# a s''
-\end{verbatim}
-And now the @newArray#@ binding can be floated to become a CAF, which
-is totally and utterly wrong:
-\begin{verbatim}
-f = let
-    (a, s')  = newArray# 100 [] realWorld#{-NB-} -- YIKES!!!
-    in
-    \ x ->
-       let (_, s'') = fill_in_array_or_something a x s' in
-       freezeArray# a s''
-\end{verbatim}
-All calls to @f@ will share a {\em single} array!  End SLPJ 95/04.
-
-\begin{code}
-runST :: (All s => ST s a) -> a
-runST st = 
-  case st of
-       ST m -> case m realWorld# of
-                       STret _ r -> r
-\end{code}