The
catchIOError function establishes a handler that receives
any
IOError raised in the action protected by
catchIOError. An
IOError is caught by the most recent
handler established by one of the exception handling functions. These
handlers are not selective: all
IOErrors 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
IOError value and exits the
program.
Non-I/O exceptions are not caught by this variant; to catch all
exceptions, use
catch from
Control.Exception.