When I was browsing the GHC documentation, I came across the following:

If the I/O computation wrapped in unsafePerformIO performs side effects, then the relative order in which those side effects take place (relative to the main I/O trunk, or other calls to unsafePerformIO) is indeterminate. You have to be careful when writing and compiling modules that use unsafePerformIO:
Now in Reactive, in e.g. the internal IVar.hs module, I see

readIVar :: IVar a -> a
readIVar (IVar v) = unsafePerformIO $ readMVar v

At first sight this function is not following all the rules described above. Could this cause problems?

Cheers,
Peter