<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ --> <title>System/IO/Error.hs</title> <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> <pre><a name="line-1"></a><span class='hs-comment'>{-# OPTIONS_GHC -XNoImplicitPrelude #-}</span> <a name="line-2"></a> <a name="line-3"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span> <a name="line-4"></a><span class='hs-comment'>-- |</span> <a name="line-5"></a><span class='hs-comment'>-- Module : System.IO.Error</span> <a name="line-6"></a><span class='hs-comment'>-- Copyright : (c) The University of Glasgow 2001</span> <a name="line-7"></a><span class='hs-comment'>-- License : BSD-style (see the file libraries/base/LICENSE)</span> <a name="line-8"></a><span class='hs-comment'>-- </span> <a name="line-9"></a><span class='hs-comment'>-- Maintainer : libraries@haskell.org</span> <a name="line-10"></a><span class='hs-comment'>-- Stability : provisional</span> <a name="line-11"></a><span class='hs-comment'>-- Portability : portable</span> <a name="line-12"></a><span class='hs-comment'>--</span> <a name="line-13"></a><span class='hs-comment'>-- Standard IO Errors.</span> <a name="line-14"></a><span class='hs-comment'>--</span> <a name="line-15"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span> <a name="line-16"></a> <a name="line-17"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span> <a name="line-18"></a> <a name="line-19"></a> <span class='hs-comment'>-- * I\/O errors</span> <a name="line-20"></a> <span class='hs-conid'>IOError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- = IOException</span> <a name="line-21"></a> <a name="line-22"></a> <span class='hs-varid'>userError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: String -> IOError</span> <a name="line-23"></a> <a name="line-24"></a> <span class='hs-varid'>mkIOError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOErrorType -> String -> Maybe Handle</span> <a name="line-25"></a> <span class='hs-comment'>-- -> Maybe FilePath -> IOError</span> <a name="line-26"></a> <a name="line-27"></a> <span class='hs-varid'>annotateIOError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> String -> Maybe Handle</span> <a name="line-28"></a> <span class='hs-comment'>-- -> Maybe FilePath -> IOError</span> <a name="line-29"></a> <a name="line-30"></a> <span class='hs-comment'>-- ** Classifying I\/O errors</span> <a name="line-31"></a> <span class='hs-varid'>isAlreadyExistsError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> Bool</span> <a name="line-32"></a> <span class='hs-varid'>isDoesNotExistError</span><span class='hs-layout'>,</span> <a name="line-33"></a> <span class='hs-varid'>isAlreadyInUseError</span><span class='hs-layout'>,</span> <a name="line-34"></a> <span class='hs-varid'>isFullError</span><span class='hs-layout'>,</span> <a name="line-35"></a> <span class='hs-varid'>isEOFError</span><span class='hs-layout'>,</span> <a name="line-36"></a> <span class='hs-varid'>isIllegalOperation</span><span class='hs-layout'>,</span> <a name="line-37"></a> <span class='hs-varid'>isPermissionError</span><span class='hs-layout'>,</span> <a name="line-38"></a> <span class='hs-varid'>isUserError</span><span class='hs-layout'>,</span> <a name="line-39"></a> <a name="line-40"></a> <span class='hs-comment'>-- ** Attributes of I\/O errors</span> <a name="line-41"></a> <span class='hs-varid'>ioeGetErrorType</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> IOErrorType</span> <a name="line-42"></a> <span class='hs-varid'>ioeGetLocation</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> String</span> <a name="line-43"></a> <span class='hs-varid'>ioeGetErrorString</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> String</span> <a name="line-44"></a> <span class='hs-varid'>ioeGetHandle</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> Maybe Handle</span> <a name="line-45"></a> <span class='hs-varid'>ioeGetFileName</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> Maybe FilePath</span> <a name="line-46"></a> <a name="line-47"></a> <span class='hs-varid'>ioeSetErrorType</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> IOErrorType -> IOError</span> <a name="line-48"></a> <span class='hs-varid'>ioeSetErrorString</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> String -> IOError</span> <a name="line-49"></a> <span class='hs-varid'>ioeSetLocation</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> String -> IOError</span> <a name="line-50"></a> <span class='hs-varid'>ioeSetHandle</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> Handle -> IOError</span> <a name="line-51"></a> <span class='hs-varid'>ioeSetFileName</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> FilePath -> IOError</span> <a name="line-52"></a> <a name="line-53"></a> <span class='hs-comment'>-- * Types of I\/O error</span> <a name="line-54"></a> <span class='hs-conid'>IOErrorType</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- abstract</span> <a name="line-55"></a> <a name="line-56"></a> <span class='hs-varid'>alreadyExistsErrorType</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOErrorType</span> <a name="line-57"></a> <span class='hs-varid'>doesNotExistErrorType</span><span class='hs-layout'>,</span> <a name="line-58"></a> <span class='hs-varid'>alreadyInUseErrorType</span><span class='hs-layout'>,</span> <a name="line-59"></a> <span class='hs-varid'>fullErrorType</span><span class='hs-layout'>,</span> <a name="line-60"></a> <span class='hs-varid'>eofErrorType</span><span class='hs-layout'>,</span> <a name="line-61"></a> <span class='hs-varid'>illegalOperationErrorType</span><span class='hs-layout'>,</span> <a name="line-62"></a> <span class='hs-varid'>permissionErrorType</span><span class='hs-layout'>,</span> <a name="line-63"></a> <span class='hs-varid'>userErrorType</span><span class='hs-layout'>,</span> <a name="line-64"></a> <a name="line-65"></a> <span class='hs-comment'>-- ** 'IOErrorType' predicates</span> <a name="line-66"></a> <span class='hs-varid'>isAlreadyExistsErrorType</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOErrorType -> Bool</span> <a name="line-67"></a> <span class='hs-varid'>isDoesNotExistErrorType</span><span class='hs-layout'>,</span> <a name="line-68"></a> <span class='hs-varid'>isAlreadyInUseErrorType</span><span class='hs-layout'>,</span> <a name="line-69"></a> <span class='hs-varid'>isFullErrorType</span><span class='hs-layout'>,</span> <a name="line-70"></a> <span class='hs-varid'>isEOFErrorType</span><span class='hs-layout'>,</span> <a name="line-71"></a> <span class='hs-varid'>isIllegalOperationErrorType</span><span class='hs-layout'>,</span> <a name="line-72"></a> <span class='hs-varid'>isPermissionErrorType</span><span class='hs-layout'>,</span> <a name="line-73"></a> <span class='hs-varid'>isUserErrorType</span><span class='hs-layout'>,</span> <a name="line-74"></a> <a name="line-75"></a> <span class='hs-comment'>-- * Throwing and catching I\/O errors</span> <a name="line-76"></a> <a name="line-77"></a> <span class='hs-varid'>ioError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IOError -> IO a</span> <a name="line-78"></a> <a name="line-79"></a> <span class='hs-varid'>catch</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IO a -> (IOError -> IO a) -> IO a</span> <a name="line-80"></a> <span class='hs-varid'>try</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: IO a -> IO (Either IOError a)</span> <a name="line-81"></a> <a name="line-82"></a> <span class='hs-varid'>modifyIOError</span><span class='hs-layout'>,</span> <span class='hs-comment'>-- :: (IOError -> IOError) -> IO a -> IO a</span> <a name="line-83"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> <a name="line-84"></a> <a name="line-85"></a><span class='hs-cpp'>#ifndef __HUGS__</span> <a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span><span class='hs-varop'>.</span><span class='hs-conid'>Base</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>New</span> <span class='hs-layout'>(</span><span class='hs-varid'>catch</span><span class='hs-layout'>)</span> <a name="line-87"></a><span class='hs-cpp'>#endif</span> <a name="line-88"></a> <a name="line-89"></a><span class='hs-cpp'>#ifndef __HUGS__</span> <a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Either</span> <a name="line-91"></a><span class='hs-cpp'>#endif</span> <a name="line-92"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <a name="line-93"></a> <a name="line-94"></a><span class='hs-cpp'>#ifdef __GLASGOW_HASKELL__</span> <a name="line-95"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>Base</span> <a name="line-96"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span> <a name="line-97"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <a name="line-98"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>GHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Handle</span><span class='hs-varop'>.</span><span class='hs-conid'>Types</span> <a name="line-99"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Show</span> <a name="line-100"></a><span class='hs-cpp'>#endif</span> <a name="line-101"></a> <a name="line-102"></a><span class='hs-cpp'>#ifdef __HUGS__</span> <a name="line-103"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Hugs</span><span class='hs-varop'>.</span><span class='hs-conid'>Prelude</span><span class='hs-layout'>(</span><span class='hs-conid'>Handle</span><span class='hs-layout'>,</span> <span class='hs-conid'>IOException</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>IOErrorType</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>IO</span><span class='hs-layout'>)</span> <a name="line-104"></a><span class='hs-cpp'>#endif</span> <a name="line-105"></a> <a name="line-106"></a><span class='hs-cpp'>#ifdef __NHC__</span> <a name="line-107"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>IO</span> <a name="line-108"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>IOError</span> <span class='hs-conid'>()</span> <a name="line-109"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Handle</span> <span class='hs-conid'>()</span> <a name="line-110"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>try</span> <a name="line-111"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ioError</span> <a name="line-112"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>userError</span> <a name="line-113"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isAlreadyExistsError</span> <span class='hs-comment'>-- :: IOError -> Bool</span> <a name="line-114"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isDoesNotExistError</span> <a name="line-115"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isAlreadyInUseError</span> <a name="line-116"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isFullError</span> <a name="line-117"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isEOFError</span> <a name="line-118"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isIllegalOperation</span> <a name="line-119"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isPermissionError</span> <a name="line-120"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isUserError</span> <a name="line-121"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ioeGetErrorString</span> <span class='hs-comment'>-- :: IOError -> String</span> <a name="line-122"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ioeGetHandle</span> <span class='hs-comment'>-- :: IOError -> Maybe Handle</span> <a name="line-123"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>ioeGetFileName</span> <span class='hs-comment'>-- :: IOError -> Maybe FilePath</span> <a name="line-124"></a> <span class='hs-layout'>)</span> <a name="line-125"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>NHC</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-126"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>DErrNo</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>NHC</span> <span class='hs-layout'>(</span><span class='hs-conid'>ErrNo</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-127"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromJust</span><span class='hs-layout'>)</span> <a name="line-128"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadPlus</span><span class='hs-layout'>(</span><span class='hs-varid'>mplus</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-129"></a><span class='hs-cpp'>#endif</span> <a name="line-130"></a> <a name="line-131"></a><span class='hs-comment'>-- | The construct 'try' @comp@ exposes IO errors which occur within a</span> <a name="line-132"></a><span class='hs-comment'>-- computation, and which are not fully handled.</span> <a name="line-133"></a><span class='hs-comment'>--</span> <a name="line-134"></a><span class='hs-comment'>-- Non-I\/O exceptions are not caught by this variant; to catch all</span> <a name="line-135"></a><span class='hs-comment'>-- exceptions, use 'Control.Exception.try' from "Control.Exception".</span> <a name="line-136"></a> <a name="line-137"></a><span class='hs-cpp'>#ifndef __NHC__</span> <a name="line-138"></a><a name="try"></a><span class='hs-definition'>try</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>IOError</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <a name="line-139"></a><span class='hs-definition'>try</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-keyword'>do</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>f</span> <a name="line-140"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Right</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-141"></a> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <a name="line-142"></a><span class='hs-cpp'>#endif</span> <a name="line-143"></a> <a name="line-144"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) || defined(__HUGS__)</span> <a name="line-145"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-146"></a><span class='hs-comment'>-- Constructing an IOError</span> <a name="line-147"></a> <a name="line-148"></a><a name="mkIOError"></a><span class='hs-comment'>-- | Construct an 'IOError' of the given type where the second argument</span> <a name="line-149"></a><span class='hs-comment'>-- describes the error location and the third and fourth argument</span> <a name="line-150"></a><span class='hs-comment'>-- contain the file handle and file path of the file involved in the</span> <a name="line-151"></a><span class='hs-comment'>-- error if applicable.</span> <a name="line-152"></a><span class='hs-definition'>mkIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-153"></a><span class='hs-definition'>mkIOError</span> <span class='hs-varid'>t</span> <span class='hs-varid'>location</span> <span class='hs-varid'>maybe_hdl</span> <span class='hs-varid'>maybe_filename</span> <span class='hs-keyglyph'>=</span> <a name="line-154"></a> <span class='hs-conid'>IOError</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_type</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span><span class='hs-layout'>,</span> <a name="line-155"></a> <span class='hs-varid'>ioe_location</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>location</span><span class='hs-layout'>,</span> <a name="line-156"></a> <span class='hs-varid'>ioe_description</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>""</span><span class='hs-layout'>,</span> <a name="line-157"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__)</span> <a name="line-158"></a> <span class='hs-varid'>ioe_errno</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>,</span> <a name="line-159"></a><span class='hs-cpp'>#endif</span> <a name="line-160"></a> <span class='hs-varid'>ioe_handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe_hdl</span><span class='hs-layout'>,</span> <a name="line-161"></a> <span class='hs-varid'>ioe_filename</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>maybe_filename</span> <a name="line-162"></a> <span class='hs-layout'>}</span> <a name="line-163"></a><span class='hs-cpp'>#endif /* __GLASGOW_HASKELL__ || __HUGS__ */</span> <a name="line-164"></a><span class='hs-cpp'>#ifdef __NHC__</span> <a name="line-165"></a><span class='hs-definition'>mkIOError</span> <span class='hs-conid'>EOF</span> <span class='hs-varid'>location</span> <span class='hs-varid'>maybe_hdl</span> <span class='hs-varid'>maybe_filename</span> <span class='hs-keyglyph'>=</span> <a name="line-166"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-varid'>location</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromJust</span> <span class='hs-varid'>maybe_hdl</span><span class='hs-layout'>)</span> <a name="line-167"></a><span class='hs-definition'>mkIOError</span> <span class='hs-conid'>UserError</span> <span class='hs-varid'>location</span> <span class='hs-varid'>maybe_hdl</span> <span class='hs-varid'>maybe_filename</span> <span class='hs-keyglyph'>=</span> <a name="line-168"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>location</span> <span class='hs-str'>""</span> <a name="line-169"></a><span class='hs-definition'>mkIOError</span> <span class='hs-varid'>t</span> <span class='hs-varid'>location</span> <span class='hs-varid'>maybe_hdl</span> <span class='hs-varid'>maybe_filename</span> <span class='hs-keyglyph'>=</span> <a name="line-170"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>location</span> <span class='hs-varid'>maybe_filename</span> <span class='hs-varid'>maybe_hdl</span> <span class='hs-layout'>(</span><span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <a name="line-171"></a> <span class='hs-keyword'>where</span> <a name="line-172"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>AlreadyExists</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EEXIST</span> <a name="line-173"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>NoSuchThing</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>ENOENT</span> <a name="line-174"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>ResourceBusy</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EBUSY</span> <a name="line-175"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>ResourceExhausted</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>ENOSPC</span> <a name="line-176"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>IllegalOperation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EPERM</span> <a name="line-177"></a> <span class='hs-varid'>ioeTypeToErrNo</span> <span class='hs-conid'>PermissionDenied</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EACCES</span> <a name="line-178"></a><span class='hs-cpp'>#endif /* __NHC__ */</span> <a name="line-179"></a> <a name="line-180"></a><span class='hs-cpp'>#ifndef __NHC__</span> <a name="line-181"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-182"></a><span class='hs-comment'>-- IOErrorType</span> <a name="line-183"></a> <a name="line-184"></a><a name="isAlreadyExistsError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-185"></a><span class='hs-comment'>-- one of its arguments already exists.</span> <a name="line-186"></a><span class='hs-definition'>isAlreadyExistsError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-187"></a><span class='hs-definition'>isAlreadyExistsError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isAlreadyExistsErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-188"></a> <a name="line-189"></a><a name="isDoesNotExistError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-190"></a><span class='hs-comment'>-- one of its arguments does not exist.</span> <a name="line-191"></a><span class='hs-definition'>isDoesNotExistError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-192"></a><span class='hs-definition'>isDoesNotExistError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isDoesNotExistErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-193"></a> <a name="line-194"></a><a name="isAlreadyInUseError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-195"></a><span class='hs-comment'>-- one of its arguments is a single-use resource, which is already</span> <a name="line-196"></a><span class='hs-comment'>-- being used (for example, opening the same file twice for writing</span> <a name="line-197"></a><span class='hs-comment'>-- might give this error).</span> <a name="line-198"></a><span class='hs-definition'>isAlreadyInUseError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-199"></a><span class='hs-definition'>isAlreadyInUseError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isAlreadyInUseErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-200"></a> <a name="line-201"></a><a name="isFullError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-202"></a><span class='hs-comment'>-- the device is full.</span> <a name="line-203"></a><span class='hs-definition'>isFullError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-204"></a><span class='hs-definition'>isFullError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isFullErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-205"></a> <a name="line-206"></a><a name="isEOFError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-207"></a><span class='hs-comment'>-- the end of file has been reached.</span> <a name="line-208"></a><span class='hs-definition'>isEOFError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-209"></a><span class='hs-definition'>isEOFError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isEOFErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-210"></a> <a name="line-211"></a><a name="isIllegalOperation"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-212"></a><span class='hs-comment'>-- the operation was not possible.</span> <a name="line-213"></a><span class='hs-comment'>-- Any computation which returns an 'IO' result may fail with</span> <a name="line-214"></a><span class='hs-comment'>-- 'isIllegalOperation'. In some cases, an implementation will not be</span> <a name="line-215"></a><span class='hs-comment'>-- able to distinguish between the possible error causes. In this case</span> <a name="line-216"></a><span class='hs-comment'>-- it should fail with 'isIllegalOperation'.</span> <a name="line-217"></a><span class='hs-definition'>isIllegalOperation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-218"></a><span class='hs-definition'>isIllegalOperation</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isIllegalOperationErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-219"></a> <a name="line-220"></a><a name="isPermissionError"></a><span class='hs-comment'>-- | An error indicating that an 'IO' operation failed because</span> <a name="line-221"></a><span class='hs-comment'>-- the user does not have sufficient operating system privilege</span> <a name="line-222"></a><span class='hs-comment'>-- to perform that operation.</span> <a name="line-223"></a><span class='hs-definition'>isPermissionError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-224"></a><span class='hs-definition'>isPermissionError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isPermissionErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-225"></a> <a name="line-226"></a><a name="isUserError"></a><span class='hs-comment'>-- | A programmer-defined error value constructed using 'userError'.</span> <a name="line-227"></a><span class='hs-definition'>isUserError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-228"></a><span class='hs-definition'>isUserError</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>isUserErrorType</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ioeGetErrorType</span> <a name="line-229"></a><span class='hs-cpp'>#endif /* __NHC__ */</span> <a name="line-230"></a> <a name="line-231"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-232"></a><span class='hs-comment'>-- IOErrorTypes</span> <a name="line-233"></a> <a name="line-234"></a><span class='hs-cpp'>#ifdef __NHC__</span> <a name="line-235"></a><a name="IOErrorType"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AlreadyExists</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NoSuchThing</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResourceBusy</span> <a name="line-236"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ResourceExhausted</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>EOF</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>IllegalOperation</span> <a name="line-237"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PermissionDenied</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>UserError</span> <a name="line-238"></a><span class='hs-cpp'>#endif</span> <a name="line-239"></a> <a name="line-240"></a><a name="alreadyExistsErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-241"></a><span class='hs-comment'>-- already exists.</span> <a name="line-242"></a><span class='hs-definition'>alreadyExistsErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-243"></a><span class='hs-definition'>alreadyExistsErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AlreadyExists</span> <a name="line-244"></a> <a name="line-245"></a><a name="doesNotExistErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-246"></a><span class='hs-comment'>-- does not exist.</span> <a name="line-247"></a><span class='hs-definition'>doesNotExistErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-248"></a><span class='hs-definition'>doesNotExistErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NoSuchThing</span> <a name="line-249"></a> <a name="line-250"></a><a name="alreadyInUseErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-251"></a><span class='hs-comment'>-- is a single-use resource, which is already being used.</span> <a name="line-252"></a><span class='hs-definition'>alreadyInUseErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-253"></a><span class='hs-definition'>alreadyInUseErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ResourceBusy</span> <a name="line-254"></a> <a name="line-255"></a><a name="fullErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the device is full.</span> <a name="line-256"></a><span class='hs-definition'>fullErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-257"></a><span class='hs-definition'>fullErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ResourceExhausted</span> <a name="line-258"></a> <a name="line-259"></a><a name="eofErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the end of file has</span> <a name="line-260"></a><span class='hs-comment'>-- been reached.</span> <a name="line-261"></a><span class='hs-definition'>eofErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-262"></a><span class='hs-definition'>eofErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>EOF</span> <a name="line-263"></a> <a name="line-264"></a><a name="illegalOperationErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation is not possible.</span> <a name="line-265"></a><span class='hs-definition'>illegalOperationErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-266"></a><span class='hs-definition'>illegalOperationErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IllegalOperation</span> <a name="line-267"></a> <a name="line-268"></a><a name="permissionErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the user does not</span> <a name="line-269"></a><span class='hs-comment'>-- have sufficient operating system privilege to perform that operation.</span> <a name="line-270"></a><span class='hs-definition'>permissionErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-271"></a><span class='hs-definition'>permissionErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PermissionDenied</span> <a name="line-272"></a> <a name="line-273"></a><a name="userErrorType"></a><span class='hs-comment'>-- | I\/O error that is programmer-defined.</span> <a name="line-274"></a><span class='hs-definition'>userErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <a name="line-275"></a><span class='hs-definition'>userErrorType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>UserError</span> <a name="line-276"></a> <a name="line-277"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-278"></a><span class='hs-comment'>-- IOErrorType predicates</span> <a name="line-279"></a> <a name="line-280"></a><a name="isAlreadyExistsErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-281"></a><span class='hs-comment'>-- already exists.</span> <a name="line-282"></a><span class='hs-definition'>isAlreadyExistsErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-283"></a><span class='hs-definition'>isAlreadyExistsErrorType</span> <span class='hs-conid'>AlreadyExists</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-284"></a><span class='hs-definition'>isAlreadyExistsErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-285"></a> <a name="line-286"></a><a name="isDoesNotExistErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-287"></a><span class='hs-comment'>-- does not exist.</span> <a name="line-288"></a><span class='hs-definition'>isDoesNotExistErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-289"></a><span class='hs-definition'>isDoesNotExistErrorType</span> <span class='hs-conid'>NoSuchThing</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-290"></a><span class='hs-definition'>isDoesNotExistErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-291"></a> <a name="line-292"></a><a name="isAlreadyInUseErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because one of its arguments</span> <a name="line-293"></a><span class='hs-comment'>-- is a single-use resource, which is already being used.</span> <a name="line-294"></a><span class='hs-definition'>isAlreadyInUseErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-295"></a><span class='hs-definition'>isAlreadyInUseErrorType</span> <span class='hs-conid'>ResourceBusy</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-296"></a><span class='hs-definition'>isAlreadyInUseErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-297"></a> <a name="line-298"></a><a name="isFullErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the device is full.</span> <a name="line-299"></a><span class='hs-definition'>isFullErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-300"></a><span class='hs-definition'>isFullErrorType</span> <span class='hs-conid'>ResourceExhausted</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-301"></a><span class='hs-definition'>isFullErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-302"></a> <a name="line-303"></a><a name="isEOFErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the end of file has</span> <a name="line-304"></a><span class='hs-comment'>-- been reached.</span> <a name="line-305"></a><span class='hs-definition'>isEOFErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-306"></a><span class='hs-definition'>isEOFErrorType</span> <span class='hs-conid'>EOF</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-307"></a><span class='hs-definition'>isEOFErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-308"></a> <a name="line-309"></a><a name="isIllegalOperationErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation is not possible.</span> <a name="line-310"></a><span class='hs-definition'>isIllegalOperationErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-311"></a><span class='hs-definition'>isIllegalOperationErrorType</span> <span class='hs-conid'>IllegalOperation</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-312"></a><span class='hs-definition'>isIllegalOperationErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-313"></a> <a name="line-314"></a><a name="isPermissionErrorType"></a><span class='hs-comment'>-- | I\/O error where the operation failed because the user does not</span> <a name="line-315"></a><span class='hs-comment'>-- have sufficient operating system privilege to perform that operation.</span> <a name="line-316"></a><span class='hs-definition'>isPermissionErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-317"></a><span class='hs-definition'>isPermissionErrorType</span> <span class='hs-conid'>PermissionDenied</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-318"></a><span class='hs-definition'>isPermissionErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-319"></a> <a name="line-320"></a><a name="isUserErrorType"></a><span class='hs-comment'>-- | I\/O error that is programmer-defined.</span> <a name="line-321"></a><span class='hs-definition'>isUserErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <a name="line-322"></a><span class='hs-definition'>isUserErrorType</span> <span class='hs-conid'>UserError</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span> <a name="line-323"></a><span class='hs-definition'>isUserErrorType</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span> <a name="line-324"></a> <a name="line-325"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-326"></a><span class='hs-comment'>-- Miscellaneous</span> <a name="line-327"></a> <a name="line-328"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) || defined(__HUGS__)</span> <a name="line-329"></a><a name="ioeGetErrorType"></a><span class='hs-definition'>ioeGetErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOErrorType</span> <a name="line-330"></a><a name="ioeGetErrorString"></a><span class='hs-definition'>ioeGetErrorString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-331"></a><a name="ioeGetLocation"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-332"></a><a name="ioeGetHandle"></a><span class='hs-definition'>ioeGetHandle</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Handle</span> <a name="line-333"></a><a name="ioeGetFileName"></a><span class='hs-definition'>ioeGetFileName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span> <a name="line-334"></a> <a name="line-335"></a><span class='hs-definition'>ioeGetErrorType</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe_type</span> <span class='hs-varid'>ioe</span> <a name="line-336"></a> <a name="line-337"></a><span class='hs-definition'>ioeGetErrorString</span> <span class='hs-varid'>ioe</span> <a name="line-338"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isUserErrorType</span> <span class='hs-layout'>(</span><span class='hs-varid'>ioe_type</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe_description</span> <span class='hs-varid'>ioe</span> <a name="line-339"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>ioe_type</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>)</span> <a name="line-340"></a> <a name="line-341"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe_location</span> <span class='hs-varid'>ioe</span> <a name="line-342"></a> <a name="line-343"></a><span class='hs-definition'>ioeGetHandle</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe_handle</span> <span class='hs-varid'>ioe</span> <a name="line-344"></a> <a name="line-345"></a><span class='hs-definition'>ioeGetFileName</span> <span class='hs-varid'>ioe</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe_filename</span> <span class='hs-varid'>ioe</span> <a name="line-346"></a> <a name="line-347"></a><a name="ioeSetErrorType"></a><span class='hs-definition'>ioeSetErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-348"></a><a name="ioeSetErrorString"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-349"></a><a name="ioeSetLocation"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-350"></a><a name="ioeSetHandle"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-351"></a><a name="ioeSetFileName"></a><span class='hs-definition'>ioeSetFileName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-352"></a> <a name="line-353"></a><span class='hs-definition'>ioeSetErrorType</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>errtype</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_type</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>errtype</span> <span class='hs-layout'>}</span> <a name="line-354"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>str</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_description</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>str</span> <span class='hs-layout'>}</span> <a name="line-355"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>str</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_location</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>str</span> <span class='hs-layout'>}</span> <a name="line-356"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>hdl</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>hdl</span> <span class='hs-layout'>}</span> <a name="line-357"></a><span class='hs-definition'>ioeSetFileName</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>filename</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_filename</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>filename</span> <span class='hs-layout'>}</span> <a name="line-358"></a> <a name="line-359"></a><span class='hs-cpp'>#elif defined(__NHC__)</span> <a name="line-360"></a><span class='hs-definition'>ioeGetErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOErrorType</span> <a name="line-361"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-362"></a> <a name="line-363"></a><span class='hs-definition'>ioeGetErrorType</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isAlreadyExistsError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>AlreadyExists</span> <a name="line-364"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isDoesNotExistError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NoSuchThing</span> <a name="line-365"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isAlreadyInUseError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ResourceBusy</span> <a name="line-366"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isFullError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>ResourceExhausted</span> <a name="line-367"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isEOFError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>EOF</span> <a name="line-368"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isIllegalOperation</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>IllegalOperation</span> <a name="line-369"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isPermissionError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PermissionDenied</span> <a name="line-370"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isUserError</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>UserError</span> <a name="line-371"></a> <a name="line-372"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"unknown location"</span> <a name="line-373"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"unknown location"</span> <a name="line-374"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-varid'>loc</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>loc</span> <a name="line-375"></a><span class='hs-definition'>ioeGetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>loc</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>loc</span> <a name="line-376"></a> <a name="line-377"></a><span class='hs-definition'>ioeSetErrorType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-378"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-379"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-380"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-381"></a><span class='hs-definition'>ioeSetFileName</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-382"></a> <a name="line-383"></a><span class='hs-definition'>ioeSetErrorType</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-384"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>f</span> <span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>s</span> <span class='hs-varid'>f</span> <span class='hs-varid'>h</span> <span class='hs-varid'>e</span> <a name="line-385"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-varid'>s</span> <span class='hs-varid'>f</span> <a name="line-386"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-varid'>e</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-387"></a><span class='hs-definition'>ioeSetErrorString</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>l</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>l</span> <span class='hs-varid'>s</span> <a name="line-388"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-varid'>e</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-389"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-varid'>e</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-390"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-varid'>l</span> <a name="line-391"></a><span class='hs-definition'>ioeSetLocation</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-varid'>l</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>l</span> <span class='hs-varid'>m</span> <a name="line-392"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>o</span> <span class='hs-varid'>f</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>o</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>h</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span> <a name="line-393"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-varid'>o</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-varid'>o</span> <span class='hs-varid'>h</span> <a name="line-394"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-varid'>e</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-395"></a><span class='hs-definition'>ioeSetHandle</span> <span class='hs-varid'>e</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-396"></a><span class='hs-definition'>ioeSetFileName</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>o</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>h</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>o</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span> <span class='hs-varid'>e</span> <a name="line-397"></a><span class='hs-definition'>ioeSetFileName</span> <span class='hs-varid'>e</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <a name="line-398"></a><span class='hs-cpp'>#endif</span> <a name="line-399"></a> <a name="line-400"></a><a name="modifyIOError"></a><span class='hs-comment'>-- | Catch any 'IOError' that occurs in the computation and throw a</span> <a name="line-401"></a><span class='hs-comment'>-- modified version.</span> <a name="line-402"></a><span class='hs-definition'>modifyIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <a name="line-403"></a><span class='hs-definition'>modifyIOError</span> <span class='hs-varid'>f</span> <span class='hs-varid'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>catch</span> <span class='hs-varid'>io</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>ioError</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <a name="line-404"></a> <a name="line-405"></a><span class='hs-comment'>-- -----------------------------------------------------------------------------</span> <a name="line-406"></a><span class='hs-comment'>-- annotating an IOError</span> <a name="line-407"></a> <a name="line-408"></a><a name="annotateIOError"></a><span class='hs-comment'>-- | Adds a location description and maybe a file path and file handle</span> <a name="line-409"></a><span class='hs-comment'>-- to an 'IOError'. If any of the file handle or file path is not given</span> <a name="line-410"></a><span class='hs-comment'>-- the corresponding value in the 'IOError' remains unaltered.</span> <a name="line-411"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IOError</span> <a name="line-412"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <a name="line-413"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Handle</span> <a name="line-414"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span> <a name="line-415"></a> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IOError</span> <a name="line-416"></a> <a name="line-417"></a><span class='hs-cpp'>#if defined(__GLASGOW_HASKELL__) || defined(__HUGS__)</span> <a name="line-418"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-varid'>ioe</span> <span class='hs-varid'>loc</span> <span class='hs-varid'>hdl</span> <span class='hs-varid'>path</span> <span class='hs-keyglyph'>=</span> <a name="line-419"></a> <span class='hs-varid'>ioe</span><span class='hs-layout'>{</span> <span class='hs-varid'>ioe_handle</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hdl</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>ioe_handle</span> <span class='hs-varid'>ioe</span><span class='hs-layout'>,</span> <a name="line-420"></a> <span class='hs-varid'>ioe_location</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>loc</span><span class='hs-layout'>,</span> <span class='hs-varid'>ioe_filename</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>path</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>ioe_filename</span> <span class='hs-varid'>ioe</span> <span class='hs-layout'>}</span> <a name="line-421"></a> <span class='hs-keyword'>where</span> <a name="line-422"></a> <span class='hs-varid'>mplus</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span> <a name="line-423"></a> <span class='hs-conid'>Nothing</span> <span class='hs-varop'>`mplus`</span> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ys</span> <a name="line-424"></a> <span class='hs-varid'>xs</span> <span class='hs-varop'>`mplus`</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>xs</span> <a name="line-425"></a><span class='hs-cpp'>#endif /* __GLASGOW_HASKELL__ || __HUGS__ */</span> <a name="line-426"></a> <a name="line-427"></a><span class='hs-cpp'>#if defined(__NHC__)</span> <a name="line-428"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-varid'>msg</span> <span class='hs-varid'>file</span> <span class='hs-varid'>hdl</span> <span class='hs-varid'>code</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg'</span> <span class='hs-varid'>hdl'</span> <span class='hs-varid'>file'</span> <span class='hs-keyglyph'>=</span> <a name="line-429"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>IOError</span> <span class='hs-layout'>(</span><span class='hs-varid'>msg</span><span class='hs-varop'>++</span><span class='hs-chr'>'\n'</span><span class='hs-conop'>:</span><span class='hs-varid'>msg'</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>file</span><span class='hs-varop'>`mplus`</span><span class='hs-varid'>file'</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>hdl</span><span class='hs-varop'>`mplus`</span><span class='hs-varid'>hdl'</span><span class='hs-layout'>)</span> <span class='hs-varid'>code</span> <a name="line-430"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-varid'>msg</span> <span class='hs-varid'>hdl</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg'</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <a name="line-431"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>EOFError</span> <span class='hs-layout'>(</span><span class='hs-varid'>msg</span><span class='hs-varop'>++</span><span class='hs-chr'>'\n'</span><span class='hs-conop'>:</span><span class='hs-varid'>msg'</span><span class='hs-layout'>)</span> <span class='hs-varid'>hdl</span> <a name="line-432"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>loc</span> <span class='hs-varid'>msg</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg'</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <a name="line-433"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>UserError</span> <span class='hs-varid'>loc</span> <span class='hs-layout'>(</span><span class='hs-varid'>msg</span><span class='hs-varop'>++</span><span class='hs-chr'>'\n'</span><span class='hs-conop'>:</span><span class='hs-varid'>msg'</span><span class='hs-layout'>)</span> <a name="line-434"></a><span class='hs-definition'>annotateIOError</span> <span class='hs-layout'>(</span><span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-varid'>loc</span><span class='hs-layout'>)</span> <span class='hs-varid'>msg'</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <a name="line-435"></a> <span class='hs-conid'>NHC</span><span class='hs-varop'>.</span><span class='hs-conid'>PatternError</span> <span class='hs-layout'>(</span><span class='hs-varid'>loc</span><span class='hs-varop'>++</span><span class='hs-chr'>'\n'</span><span class='hs-conop'>:</span><span class='hs-varid'>msg'</span><span class='hs-layout'>)</span> <a name="line-436"></a><span class='hs-cpp'>#endif</span> <a name="line-437"></a> <a name="line-438"></a><span class='hs-cpp'>#ifndef __HUGS__</span> <a name="line-439"></a><a name="catch"></a><span class='hs-comment'>-- | The 'catch' function establishes a handler that receives any 'IOError'</span> <a name="line-440"></a><span class='hs-comment'>-- raised in the action protected by 'catch'. An 'IOError' is caught by</span> <a name="line-441"></a><span class='hs-comment'>-- the most recent handler established by 'catch'. These handlers are</span> <a name="line-442"></a><span class='hs-comment'>-- not selective: all 'IOError's are caught. Exception propagation</span> <a name="line-443"></a><span class='hs-comment'>-- must be explicitly provided in a handler by re-raising any unwanted</span> <a name="line-444"></a><span class='hs-comment'>-- exceptions. For example, in</span> <a name="line-445"></a><span class='hs-comment'>--</span> <a name="line-446"></a><span class='hs-comment'>-- > f = catch g (\e -> if IO.isEOFError e then return [] else ioError e)</span> <a name="line-447"></a><span class='hs-comment'>--</span> <a name="line-448"></a><span class='hs-comment'>-- the function @f@ returns @[]@ when an end-of-file exception</span> <a name="line-449"></a><span class='hs-comment'>-- (cf. 'System.IO.Error.isEOFError') occurs in @g@; otherwise, the</span> <a name="line-450"></a><span class='hs-comment'>-- exception is propagated to the next outer handler.</span> <a name="line-451"></a><span class='hs-comment'>--</span> <a name="line-452"></a><span class='hs-comment'>-- When an exception propagates outside the main program, the Haskell</span> <a name="line-453"></a><span class='hs-comment'>-- system prints the associated 'IOError' value and exits the program.</span> <a name="line-454"></a><span class='hs-comment'>--</span> <a name="line-455"></a><span class='hs-comment'>-- Non-I\/O exceptions are not caught by this variant; to catch all</span> <a name="line-456"></a><span class='hs-comment'>-- exceptions, use 'Control.Exception.catch' from "Control.Exception".</span> <a name="line-457"></a><span class='hs-definition'>catch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <a name="line-458"></a><span class='hs-definition'>catch</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>New</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span> <a name="line-459"></a><span class='hs-cpp'>#endif /* !__HUGS__ */</span> </pre></body> </html>