Copyright | (c) The University of Glasgow 2001-2002 |
---|---|
License | see libraries/base/LICENSE |
Maintainer | [email protected] |
Stability | internal |
Portability | non-portable (GHC Extensions) |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Support for catching exceptions raised during top-level computations (e.g. Main.main
, forkIO
, and foreign exports)
runMainIO :: IO a -> IO a Source
runMainIO
is wrapped around 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 exitWith
in a foreign-exported function is the same as in the main thread: it terminates the program.
runIOFastExit :: IO a -> IO a Source
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.
topHandler :: SomeException -> IO a Source
topHandlerFastExit :: SomeException -> IO a Source
reportStackOverflow :: IO () Source
reportError :: SomeException -> IO () Source
flushStdHandles :: IO () Source
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.8.3/docs/html/libraries/base-4.13.0.0/GHC-TopHandler.html