-----------------------------------------------------------------------------
---
+-- |
-- Module : Control.Exception
-- Copyright : (c) The University of Glasgow 2001
-- License : BSD-style (see the file libraries/core/LICENSE)
-- Stability : experimental
-- Portability : non-portable
--
--- $Id: Exception.hs,v 1.1 2001/06/28 14:15:01 simonmar Exp $
+-- $Id: Exception.hs,v 1.7 2002/04/24 16:31:37 simonmar Exp $
--
-- The External API for exceptions. The functions provided in this
-- module allow catching of exceptions in the IO monad.
catch, -- :: IO a -> (Exception -> IO a) -> IO a
catchJust, -- :: (Exception -> Maybe b) -> IO a -> (b -> IO a) -> IO a
+ handle, -- :: (Exception -> IO a) -> IO a -> IO a
+ handleJust,-- :: (Exception -> Maybe b) -> (b -> IO a) -> IO a -> IO a
+
evaluate, -- :: a -> IO a
- -- Exception predicates (for catchJust, tryJust)
+ -- Exception predicates (for tryJust, catchJust, handleJust)
ioErrors, -- :: Exception -> Maybe IOError
arithExceptions, -- :: Exception -> Maybe ArithException
-- Throwing exceptions
throw, -- :: Exception -> a
-#ifndef __STGHUGS__
- -- for now
throwTo, -- :: ThreadId -> Exception -> a
-#endif
-- Dynamic exceptions
#ifdef __GLASGOW_HASKELL__
import Prelude hiding (catch)
-import GHC.Prim ( assert )
+import System.IO.Error
+import GHC.Base ( assert )
import GHC.Exception hiding (try, catch, bracket, bracket_)
import GHC.Conc ( throwTo, ThreadId )
import GHC.IOBase ( IO(..) )
-----------------------------------------------------------------------------
-- Catching exceptions
--- PrelException defines 'catchException' for us.
+-- GHC.Exception defines 'catchException' for us.
-catch :: IO a -> (Exception -> IO a) -> IO a
-catch = catchException
+catch :: IO a -> (Exception -> IO a) -> IO a
+catch = catchException
catchJust :: (Exception -> Maybe b) -> IO a -> (b -> IO a) -> IO a
catchJust p a handler = catch a handler'
Nothing -> throw e
Just b -> handler b
+handle :: (Exception -> IO a) -> IO a -> IO a
+handle = flip catch
+
+handleJust :: (Exception -> Maybe b) -> (b -> IO a) -> IO a -> IO a
+handleJust p = flip (catchJust p)
+
-----------------------------------------------------------------------------
-- evaluate
asyncExceptions (AsyncException e) = Just e
asyncExceptions _ = Nothing
-userErrors (UserError e) = Just e
+userErrors e | isUserError e = Just (ioeGetErrorString e)
userErrors _ = Nothing
-----------------------------------------------------------------------------