The
catchIOError function establishes a handler that receives
any
IOException raised in the action protected by
catchIOError. An
IOException is caught by the most
recent handler established by one of the exception handling functions.
These handlers are not selective: all
IOExceptions are caught.
Exception propagation must be explicitly provided in a handler by
re-raising any unwanted exceptions. For example, in
f = catchIOError g (\e -> if IO.isEOFError e then return [] else ioError e)
the function
f returns
[] when an end-of-file
exception (cf.
isEOFError) occurs in
g; otherwise, the
exception is propagated to the next outer handler.
When an exception propagates outside the main program, the Haskell
system prints the associated
IOException value and exits the
program.
Non-I/O exceptions are not caught by this variant; to catch all
exceptions, use
catch from
Control.Exception.