Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > f9b127c02f56e71454a7233185e51eb4 > files > 901

ghc-base-devel-4.3.1.0-16.fc15.i686.rpm

<?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  -&gt; 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 -&gt; String -&gt; Maybe Handle</span>
<a name="line-25"></a>                                <span class='hs-comment'>--    -&gt; Maybe FilePath -&gt; 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 -&gt; String -&gt; Maybe Handle</span>
<a name="line-28"></a>                                <span class='hs-comment'>--    -&gt; Maybe FilePath -&gt; 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 -&gt; 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 -&gt; IOErrorType</span>
<a name="line-42"></a>    <span class='hs-varid'>ioeGetLocation</span><span class='hs-layout'>,</span>             <span class='hs-comment'>-- :: IOError -&gt; String</span>
<a name="line-43"></a>    <span class='hs-varid'>ioeGetErrorString</span><span class='hs-layout'>,</span>          <span class='hs-comment'>-- :: IOError -&gt; String</span>
<a name="line-44"></a>    <span class='hs-varid'>ioeGetHandle</span><span class='hs-layout'>,</span>               <span class='hs-comment'>-- :: IOError -&gt; Maybe Handle</span>
<a name="line-45"></a>    <span class='hs-varid'>ioeGetFileName</span><span class='hs-layout'>,</span>             <span class='hs-comment'>-- :: IOError -&gt; 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 -&gt; IOErrorType -&gt; IOError</span>
<a name="line-48"></a>    <span class='hs-varid'>ioeSetErrorString</span><span class='hs-layout'>,</span>          <span class='hs-comment'>-- :: IOError -&gt; String -&gt; IOError</span>
<a name="line-49"></a>    <span class='hs-varid'>ioeSetLocation</span><span class='hs-layout'>,</span>             <span class='hs-comment'>-- :: IOError -&gt; String -&gt; IOError</span>
<a name="line-50"></a>    <span class='hs-varid'>ioeSetHandle</span><span class='hs-layout'>,</span>               <span class='hs-comment'>-- :: IOError -&gt; Handle -&gt; IOError</span>
<a name="line-51"></a>    <span class='hs-varid'>ioeSetFileName</span><span class='hs-layout'>,</span>             <span class='hs-comment'>-- :: IOError -&gt; FilePath -&gt; 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 -&gt; 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 -&gt; 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 -&gt; (IOError -&gt; IO a) -&gt; 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 -&gt; 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 -&gt; IOError) -&gt; IO a -&gt; 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 -&gt; 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 -&gt; String</span>
<a name="line-122"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>ioeGetHandle</span>                <span class='hs-comment'>-- :: IOError -&gt; Maybe Handle</span>
<a name="line-123"></a>  <span class='hs-layout'>,</span> <span class='hs-varid'>ioeGetFileName</span>              <span class='hs-comment'>-- :: IOError -&gt; 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'>-&gt;</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'>&lt;-</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'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Handle</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>Handle</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>FilePath</span>    <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>IOErrorType</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>Handle</span>      <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>FilePath</span>    <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>IOError</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>String</span> 
<a name="line-413"></a>              <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Handle</span> 
<a name="line-414"></a>              <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>FilePath</span> 
<a name="line-415"></a>              <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</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'>-- &gt; f = catch g (\e -&gt; 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'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>IOError</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</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>