> I can't seem to figure out what the difference is between using
>
> evaluate (runST action)
>
> and
>
> stToIO action
>
> when in the IO monad and running something in ST...they seem to behave
> identically...are they?
>
> If they are, why do they have different type signatures (one is ST
> RealWorld a -> IO a, while the other is (forall s. ST s a) -> IO a)?
With stToIO, you can do this:
do r <- stToIO newSTRef
stToIO $ writeSTRef r 42
...
the types prevent you doing that with runST, but runST is safe to use in
pure code whereas stToIO must be used in the IO monad.
Cheers,
Simon
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell