% -----------------------------------------------------------------------------
-% $Id: PrelException.lhs,v 1.5 1999/03/17 13:19:20 simonm Exp $
+% $Id: PrelException.lhs,v 1.8 1999/07/14 08:33:38 simonmar Exp $
%
% (c) The GRAP/AQUA Project, Glasgow University, 1998
%
module PrelException where
import PrelBase
+import PrelShow
import PrelIOBase
import PrelST ( STret(..) )
import PrelDynamic
| AssertionFailed String -- Assertions
| DynException Dynamic -- Dynamic exceptions
| AsyncException AsyncException -- Externally generated errors
+ | NonTermination
data ArithException
= Overflow
showsPrec _ (AssertionFailed err) = showString err
showsPrec _ (AsyncException e) = shows e
showsPrec _ (DynException _err) = showString "unknown exception"
+ showsPrec _ (NonTermination) = showString "<<loop>>"
-- Primitives:
catch m k = catchException m handler
where handler (IOException err) = k err
handler other = throw other
+
+catchNonIO :: IO a -> (Exception -> IO a) -> IO a
+catchNonIO m k = catchException m handler
+ where handler (IOException err) = ioError err
+ handler other = k other
\end{code}
+
Why is this stuff here? To avoid recursive module dependencies of
course.