-- * Unsafe operations
unsafeInterleaveST, -- :: ST s a -> ST s a
- unsafeIOToST -- :: IO a -> ST s a
+ unsafeIOToST, -- :: IO a -> ST s a
+ unsafeSTToIO -- :: ST s a -> IO a
) where
import Prelude
#ifdef __GLASGOW_HASKELL__
import GHC.ST ( ST, runST, fixST, unsafeInterleaveST )
import GHC.Base ( RealWorld )
-import GHC.IOBase ( stToIO, unsafeIOToST )
+import GHC.IOBase ( stToIO, unsafeIOToST, unsafeSTToIO )
#endif
instance MonadFix (ST s) where
unsafePerformIO, unsafeInterleaveIO,
-- To and from from ST
- stToIO, ioToST, unsafeIOToST,
+ stToIO, ioToST, unsafeIOToST, unsafeSTToIO,
-- References
IORef(..), newIORef, readIORef, writeIORef,
unsafeIOToST :: IO a -> ST s a
unsafeIOToST (IO io) = ST $ \ s -> (unsafeCoerce# io) s
+unsafeSTToIO :: ST s a -> IO a
+unsafeSTToIO (ST m) = IO (unsafeCoerce# m)
+
-- ---------------------------------------------------------------------------
-- Unsafe IO operations