|Portability||non-portable (GHC Extensions)|
|Support for catching exceptions raised during top-level computations
(e.g. Main.main, Control.Concurrent.forkIO, and foreign exports)
|runMainIO is wrapped around Main.main (or whatever main is
called in the program). It catches otherwise uncaught exceptions,
and also flushes stdout/stderr before exiting.
|runIO is wrapped around every foreign export and foreign
import "wrapper" to mop up any uncaught exceptions. Thus, the
result of running System.Exit.exitWith in a foreign-exported
function is the same as in the main thread: it terminates the
Like runIO, but in the event of an exception that causes an exit,
we don't shut down the system cleanly, we just exit. This is
useful in some cases, because the safe exit version will give other
threads a chance to clean up first, which might shut down the
system in a different way. For example, try
main = forkIO (runIO (exitWith (ExitFailure 1))) >> threadDelay 10000
This will sometimes exit with interrupted and code 0, because the
main thread is given a chance to shut down when the child thread calls
safeExit. There is a race to shut down between the main and child threads.
|The same as runIO, but for non-IO computations. Used for
wrapping foreign export and foreign import "wrapper" when these
are used to export Haskell functions with non-IO types.
|Produced by Haddock version 2.3.0|