haskell2010-1.0.0.0: System/Exit.hs
module System.Exit (
ExitCode(ExitSuccess,ExitFailure)
, exitWith -- :: ExitCode -> IO a
, exitFailure -- :: IO a
, exitSuccess -- :: IO a
) where
import "base" System.Exit hiding (exitWith)
import qualified "base" System.Exit as Base
-- SDM: use the Haskell 98 docs for exitWith, since the base docs talk
-- about exceptions which aren't in Haskell 2010.
-- SDM: removed:
-- Before the program terminates, any open or semi-closed handles are
-- first closed.
-- SDM: removed:
-- If a program terminates as a result of calling @error@\indextt{error} or
-- because its value is otherwise determined to be "\bot"\index{"\bot"}, then it
-- is treated identically to the computation @exitFailure@. Otherwise, if any
-- program "p" terminates without calling @exitWith@ explicitly, it is treated
-- identically to the computation
-- \bprog
-- @(@"p"@ >> exitWith ExitSuccess) `catch` \ _ -> exitFailure@
-- \eprog
{- |
Computation @'exitWith' code@ terminates the program, returning @code@
to the program's caller.
The caller may interpret the return code as it wishes, but the program
should return 'ExitSuccess' to mean normal completion, and
@'ExitFailure' n@ to mean that the program encountered a problem from
which it could not recover. The value 'exitFailure' is equal to
@'exitWith' ('ExitFailure' exitfail)@, where @exitfail@ is
implementation-dependent. 'exitWith' bypasses the error handling in
the I/O monad and cannot be intercepted by 'catch' from the @Prelude@.
-}
exitWith :: ExitCode -> IO a
exitWith = Base.exitWith