X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=System%2FExit.hs;h=a344f7a0e6de27f00cc997f61b6e56e8668c9992;hb=82b61ac8e14df43f84afc20c6f6691f433f07951;hp=ef199365d460927604d85e2542a16c1df0ad5b83;hpb=3e118622794d68f63338b3e00fe450b552408b64;p=ghc-base.git diff --git a/System/Exit.hs b/System/Exit.hs index ef19936..a344f7a 100644 --- a/System/Exit.hs +++ b/System/Exit.hs @@ -23,13 +23,13 @@ module System.Exit import Prelude #ifdef __GLASGOW_HASKELL__ -import GHC.Exception -import GHC.IOBase +import GHC.IO +import GHC.IO.Exception #endif #ifdef __HUGS__ -import Hugs.Prelude -import Hugs.Exception +import Hugs.Prelude (ExitCode(..)) +import Control.Exception.Base #endif #ifdef __NHC__ @@ -58,14 +58,19 @@ import System -- 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'. - +-- +-- Note: in GHC, 'exitWith' should be called from the main program +-- thread in order to exit the process. When called from another +-- thread, 'exitWith' will throw an 'ExitException' as normal, but the +-- exception will not cause the process itself to exit. +-- #ifndef __NHC__ exitWith :: ExitCode -> IO a -exitWith ExitSuccess = throwIO (ExitException ExitSuccess) +exitWith ExitSuccess = throwIO ExitSuccess exitWith code@(ExitFailure n) - | n /= 0 = throwIO (ExitException code) + | n /= 0 = throwIO code #ifdef __GLASGOW_HASKELL__ - | otherwise = ioError (IOError Nothing InvalidArgument "exitWith" "ExitFailure 0" Nothing) + | otherwise = ioError (IOError Nothing InvalidArgument "exitWith" "ExitFailure 0" Nothing Nothing) #endif #endif /* ! __NHC__ */