[Haskell-cafe] unsafeSTToIO and stToIO

Xiao-Yong Jin xj2106 at columbia.edu
Wed Apr 29 17:26:46 EDT 2009


Between the following two functions

stToIO        :: ST RealWorld a -> IO a
stToIO (ST m) = IO m

unsafeSTToIO :: ST s a -> IO a
unsafeSTToIO (ST m) = IO (unsafeCoerce# m)

All I can see is that the safe one uses RealWorld instead of
an arbitrary thread s used in the unsafe one.  I really
don't understand the difference between these two.  Why is
the one without RealWorld unsafe?

I tried google, but couldn't find anything helpful.
    c/*    __o/*
    <\     * (__
    */\      <

More information about the Haskell-Cafe mailing list