Chapter 26
Foreign.C.Error

module Foreign.C.Error (  
    Errno(Errno),  eOK,  e2BIG,  eACCES,  eADDRINUSE,  eADDRNOTAVAIL,  eADV,  
    eAFNOSUPPORT,  eAGAIN,  eALREADY,  eBADF,  eBADMSG,  eBADRPC,  eBUSY,  
    eCHILD,  eCOMM,  eCONNABORTED,  eCONNREFUSED,  eCONNRESET,  eDEADLK,  
    eDESTADDRREQ,  eDIRTY,  eDOM,  eDQUOT,  eEXIST,  eFAULT,  eFBIG,  eFTYPE,  
    eHOSTDOWN,  eHOSTUNREACH,  eIDRM,  eILSEQ,  eINPROGRESS,  eINTR,  eINVAL,  
    eIO,  eISCONN,  eISDIR,  eLOOP,  eMFILE,  eMLINK,  eMSGSIZE,  eMULTIHOP,  
    eNAMETOOLONG,  eNETDOWN,  eNETRESET,  eNETUNREACH,  eNFILE,  eNOBUFS,  
    eNODATA,  eNODEV,  eNOENT,  eNOEXEC,  eNOLCK,  eNOLINK,  eNOMEM,  eNOMSG,  
    eNONET,  eNOPROTOOPT,  eNOSPC,  eNOSR,  eNOSTR,  eNOSYS,  eNOTBLK,  
    eNOTCONN,  eNOTDIR,  eNOTEMPTY,  eNOTSOCK,  eNOTTY,  eNXIO,  eOPNOTSUPP,  
    ePERM,  ePFNOSUPPORT,  ePIPE,  ePROCLIM,  ePROCUNAVAIL,  ePROGMISMATCH,  
    ePROGUNAVAIL,  ePROTO,  ePROTONOSUPPORT,  ePROTOTYPE,  eRANGE,  eREMCHG,  
    eREMOTE,  eROFS,  eRPCMISMATCH,  eRREMOTE,  eSHUTDOWN,  eSOCKTNOSUPPORT,  
    eSPIPE,  eSRCH,  eSRMNT,  eSTALE,  eTIME,  eTIMEDOUT,  eTOOMANYREFS,  
    eTXTBSY,  eUSERS,  eWOULDBLOCK,  eXDEV,  isValidErrno,  getErrno,  
    resetErrno,  errnoToIOError,  throwErrno,  throwErrnoIf,  throwErrnoIf_,  
    throwErrnoIfRetry,  throwErrnoIfRetry_,  throwErrnoIfMinus1,  
    throwErrnoIfMinus1_,  throwErrnoIfMinus1Retry,  throwErrnoIfMinus1Retry_,  
    throwErrnoIfNull,  throwErrnoIfNullRetry,  throwErrnoIfRetryMayBlock,  
    throwErrnoIfRetryMayBlock_,  throwErrnoIfMinus1RetryMayBlock,  
    throwErrnoIfMinus1RetryMayBlock_,  throwErrnoIfNullRetryMayBlock,  
    throwErrnoPath,  throwErrnoPathIf,  throwErrnoPathIf_,  
    throwErrnoPathIfNull,  throwErrnoPathIfMinus1,  throwErrnoPathIfMinus1_  
  ) where

The module Foreign.C.Error facilitates C-specific error handling of errno.

26.1 errno 値のHaskellにおける表現

newtype Errno
= Errno CInt

Haskell representation for errno values. The implementation is deliberately exposed, to allow users to add their own definitions of Errno values.

instance Eq Errno

26.1.1 よく使われる errno 記号

Different operating systems and/or C libraries often support different values of errno. This module defines the common values, but due to the open definition of Errno users may add definitions which are not predefined.

eOK :: Errno
e2BIG :: Errno
eACCES :: Errno
eADDRINUSE :: Errno
eADDRNOTAVAIL :: Errno
eADV :: Errno
eAFNOSUPPORT :: Errno
eAGAIN :: Errno
eALREADY :: Errno
eBADF :: Errno
eBADMSG :: Errno
eBADRPC :: Errno
eBUSY :: Errno
eCHILD :: Errno
eCOMM :: Errno
eCONNABORTED :: Errno
eCONNREFUSED :: Errno
eCONNRESET :: Errno
eDEADLK :: Errno
eDESTADDRREQ :: Errno
eDIRTY :: Errno
eDOM :: Errno
eDQUOT :: Errno
eEXIST :: Errno
eFAULT :: Errno
eFBIG :: Errno
eFTYPE :: Errno
eHOSTDOWN :: Errno
eHOSTUNREACH :: Errno
eIDRM :: Errno
eILSEQ :: Errno
eINPROGRESS :: Errno
eINTR :: Errno
eINVAL :: Errno
eIO :: Errno
eISCONN :: Errno
eISDIR :: Errno
eLOOP :: Errno
eMFILE :: Errno
eMLINK :: Errno
eMSGSIZE :: Errno
eMULTIHOP :: Errno
eNAMETOOLONG :: Errno
eNETDOWN :: Errno
eNETRESET :: Errno
eNETUNREACH :: Errno
eNFILE :: Errno
eNOBUFS :: Errno
eNODATA :: Errno
eNODEV :: Errno
eNOENT :: Errno
eNOEXEC :: Errno
eNOLCK :: Errno
eNOLINK :: Errno
eNOMEM :: Errno
eNOMSG :: Errno
eNONET :: Errno
eNOPROTOOPT :: Errno
eNOSPC :: Errno
eNOSR :: Errno
eNOSTR :: Errno
eNOSYS :: Errno
eNOTBLK :: Errno
eNOTCONN :: Errno
eNOTDIR :: Errno
eNOTEMPTY :: Errno
eNOTSOCK :: Errno
eNOTTY :: Errno
eNXIO :: Errno
eOPNOTSUPP :: Errno
ePERM :: Errno
ePFNOSUPPORT :: Errno
ePIPE :: Errno
ePROCLIM :: Errno
ePROCUNAVAIL :: Errno
ePROGMISMATCH :: Errno
ePROGUNAVAIL :: Errno
ePROTO :: Errno
ePROTONOSUPPORT :: Errno
ePROTOTYPE :: Errno
eRANGE :: Errno
eREMCHG :: Errno
eREMOTE :: Errno
eROFS :: Errno
eRPCMISMATCH :: Errno
eRREMOTE :: Errno
eSHUTDOWN :: Errno
eSOCKTNOSUPPORT :: Errno
eSPIPE :: Errno
eSRCH :: Errno
eSRMNT :: Errno
eSTALE :: Errno
eTIME :: Errno
eTIMEDOUT :: Errno
eTOOMANYREFS :: Errno
eTXTBSY :: Errno
eUSERS :: Errno
eWOULDBLOCK :: Errno
eXDEV :: Errno

26.1.2 Errno 関数

isValidErrno :: Errno -> Bool
Yield True if the given Errno value is valid on the system. This implies that the Eq instance of Errno is also system dependent as it is only defined for valid values of Errno.

getErrno :: IO Errno
Get the current value of errno in the current thread.

resetErrno :: IO ()
Reset the current thread’s errno value to eOK.

errnoToIOError
:: String the location where the error occurred
-> Errno the error number
-> Maybe Handle optional handle associated with the error
-> Maybe String optional filename associated with the error
-> IOError

Construct an IOError based on the given Errno value. The optional information can be used to improve the accuracy of error messages.

throwErrno
:: String textual description of the error location
-> IO a

Throw an IOError corresponding to the current value of getErrno.

26.1.3 失敗する可能性のある入出力操作に対応するガード

throwErrnoIf
:: (a -> Bool) predicate to apply to the result value of the IO operation
-> String textual description of the location
-> IO a the IO operation to be executed
-> IO a

Throw an IOError corresponding to the current value of getErrno if the result value of the IO action meets the given predicate.

throwErrnoIf_ :: (a -> Bool) -> String -> IO a -> IO ()
as throwErrnoIf, but discards the result of the IO action after error handling.

throwErrnoIfRetry :: (a -> Bool) -> String -> IO a -> IO a
as throwErrnoIf, but retry the IO action when it yields the error code eINTR - this amounts to the standard retry loop for interrupted POSIX system calls.

throwErrnoIfRetry_ :: (a -> Bool) -> String -> IO a -> IO ()
as throwErrnoIfRetry, but discards the result.

throwErrnoIfMinus1 :: Num a => String -> IO a -> IO a
Throw an IOError corresponding to the current value of getErrno if the IO action returns a result of -1.

throwErrnoIfMinus1_ :: Num a => String -> IO a -> IO ()
as throwErrnoIfMinus1, but discards the result.

throwErrnoIfMinus1Retry :: Num a => String -> IO a -> IO a
Throw an IOError corresponding to the current value of getErrno if the IO action returns a result of -1, but retries in case of an interrupted operation.

throwErrnoIfMinus1Retry_ :: Num a => String -> IO a -> IO ()
as throwErrnoIfMinus1, but discards the result.

throwErrnoIfNull :: String -> IO (Ptr a) -> IO (Ptr a)
Throw an IOError corresponding to the current value of getErrno if the IO action returns nullPtr.

throwErrnoIfNullRetry :: String -> IO (Ptr a) -> IO (Ptr a)
Throw an IOError corresponding to the current value of getErrno if the IO action returns nullPtr, but retry in case of an interrupted operation.

throwErrnoIfRetryMayBlock
:: (a -> Bool) predicate to apply to the result value of the IO operation
-> String textual description of the location
-> IO a the IO operation to be executed
-> IO b action to execute before retrying if an immediate retry would block
-> IO a

as throwErrnoIfRetry, but additionally if the operation yields the error code eAGAIN or eWOULDBLOCK, an alternative action is executed before retrying.

throwErrnoIfRetryMayBlock_ :: (a -> Bool)
                              -> String -> IO a -> IO b -> IO ()
as throwErrnoIfRetryMayBlock, but discards the result.

throwErrnoIfMinus1RetryMayBlock :: Num a => String
                                            -> IO a -> IO b -> IO a
as throwErrnoIfMinus1Retry, but checks for operations that would block.

throwErrnoIfMinus1RetryMayBlock_ :: Num a => String
                                             -> IO a -> IO b -> IO ()
as throwErrnoIfMinus1RetryMayBlock, but discards the result.

throwErrnoIfNullRetryMayBlock :: String
                                 -> IO (Ptr a) -> IO b -> IO (Ptr a)
as throwErrnoIfNullRetry, but checks for operations that would block.

throwErrnoPath :: String -> FilePath -> IO a
as throwErrno, but exceptions include the given path when appropriate.

throwErrnoPathIf :: (a -> Bool)
                    -> String -> FilePath -> IO a -> IO a
as throwErrnoIf, but exceptions include the given path when appropriate.

throwErrnoPathIf_ :: (a -> Bool)
                     -> String -> FilePath -> IO a -> IO ()
as throwErrnoIf_, but exceptions include the given path when appropriate.

throwErrnoPathIfNull :: String
                        -> FilePath -> IO (Ptr a) -> IO (Ptr a)
as throwErrnoIfNull, but exceptions include the given path when appropriate.

throwErrnoPathIfMinus1 :: Num a => String
                                   -> FilePath -> IO a -> IO a
as throwErrnoIfMinus1, but exceptions include the given path when appropriate.

throwErrnoPathIfMinus1_ :: Num a => String
                                    -> FilePath -> IO a -> IO ()
as throwErrnoIfMinus1_, but exceptions include the given path when appropriate.