> 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

Reply via email to