On 07/04/2010, at 07:33, Nicolas Frisby wrote: > I haven't been able to find it via Google or Haddock. An old message > suggests is was just a matter of exceptions?
I don't think that's correct. You can implement unsafePerformIO in terms unsafeIOToST: unsafePerformIO :: IO a -> a unsafePerformIO p = runST (unsafeIOToST p) In fact, the only safe-ish use for it I have found is to use Storable-related functions in ST, hoping that the instances don't actually use any real IO functionality. Arguably, this shouldn't be necessary as Storable should live in ST anyway. > I only want to use the IO for generating Data.Uniques to pair with > STRefs in order to make a map of them. I'm guessing this would be a > safe use since it's exception free (... right?). It's hard to tell without looking at your code. But if you are generating Uniques in ST then it's probably unsafe: foo :: () -> Unique foo _ = runST (unsafeIOToST newUnique) What's the value of foo ()? Roman _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe