Fw: Re: Re[2]: No more ExitException? <- documentation bug

The following message went to Bulat Ziganshin alone. So here it is for the mailing list. Sorry.
Begin forwarded message:
On Wed, 27 Jan 2010 12:43:13 +0300
Bulat Ziganshin
exitWith throws the ExitCode when it is called. This leads to the shutdown of the program, if it isn't caught. Just like ExitException.
This isn't documented.
i've googled for "exitWith throws the ExitCode" and it pointed me to the exitWith docs: "Computation exitWith code throws ExitException code."
This is the source code of exitWith:
-------------------------snip-----------------------------
-- ---------------------------------------------------------------------------
-- exitWith
-- | Computation 'exitWith' @code@ throws 'ExitException' @code@.
-- Normally this terminates the program, returning @code@ to the
-- program's caller. Before the program terminates, any open or
-- semi-closed handles are first closed.
--
-- A program that fails in any other way is treated as if it had
-- called 'exitFailure'.
-- A program that terminates successfully without calling 'exitWith'
-- explicitly is treated as it it had called 'exitWith' 'ExitSuccess'.
--
-- As an 'ExitException' is not an 'IOError', 'exitWith' bypasses
-- the error handling in the 'IO' monad and cannot be intercepted by
-- 'catch' from the "Prelude". However it is an 'Exception', and can
-- be caught using the functions of "Control.Exception". This means
-- that cleanup computations added with 'Control.Exception.bracket'
-- (from "Control.Exception") are also executed properly on 'exitWith'.
#ifndef __NHC__
exitWith :: ExitCode -> IO a
exitWith ExitSuccess = throwIO ExitSuccess
exitWith code@(ExitFailure n)
| n /= 0 = throwIO code
#ifdef __GLASGOW_HASKELL__
| otherwise = ioError (IOError Nothing InvalidArgument "exitWith" "ExitFailure 0" Nothing)
#endif
#endif /* ! __NHC__ */
-------------------------snip-----------------------------
As you can see, it throws the ExitCode, not an ExitException. The documentation is faulty.
Cheers,
Volker
--
Volker Wysk
participants (2)
-
Ian Lynagh
-
Volker Wysk