Foreign.C.Error

base-4.9.0.0: Basic libraries

Copyright | (c) The FFI task force 2001
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | ffi@haskell.org
Stability | provisional
Portability | portable
Safe Haskell | Trustworthy
Language | Haskell2010

Foreign.C.Error

Contents

- Haskell representations of `errno` values
  - Common `errno` symbols
  - `Errno` functions
  - Guards for IO operations that may fail

Description

C-specific Marshalling support: Handling of C "errno" error codes.

Synopsis

- newtype Errno = Errno CInt
- 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
- eNOTSUP :: 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
- isValidErrno :: Errno -> Bool
- getErrno :: IO Errno
- resetErrno :: IO ()
- errnoToIOError :: String -> Errno -> Maybe Handle -> Maybe String -> IOError
- throwErrno :: String -> IO a
- throwErrnoIf :: (a -> Bool) -> String -> IO a -> IO a
- throwErrnoIf_ :: (a -> Bool) -> String -> IO a -> IO ()
- throwErrnoIfRetry :: (a -> Bool) -> String -> IO a -> IO a
- throwErrnoIfRetry_ :: (a -> Bool) -> String -> IO a -> IO ()
- throwErrnoIfMinus1 :: (Eq a, Num a) => String -> IO a -> IO a
- throwErrnoIfMinus1_ :: (Eq a, Num a) => String -> IO a -> IO ()
- throwErrnoIfMinus1Retry :: (Eq a, Num a) => String -> IO a -> IO a
- throwErrnoIfMinus1Retry_ :: (Eq a, Num a) => String -> IO a -> IO ()
- throwErrnoIfNull :: String -> IO (Ptr a) -> IO (Ptr a)
- throwErrnoIfNullRetry :: String -> IO (Ptr a) -> IO (Ptr a)
- throwErrnoIfRetryMayBlock :: (a -> Bool) -> String -> IO a -> IO b -> IO a
- throwErrnoIfRetryMayBlock_ :: (a -> Bool) -> String -> IO a -> IO b -> IO ()
- throwErrnoIfMinus1RetryMayBlock :: (Eq a, Num a) => String -> IO a -> IO b -> IO a
- throwErrnoIfMinus1RetryMayBlock_ :: (Eq a, Num a) => String -> IO a -> IO b -> IO ()
- throwErrnoIfNullRetryMayBlock :: String -> IO (Ptr a) -> IO b -> IO (Ptr a)
- throwErrnoPath :: String -> FilePath -> IO a
- throwErrnoPathIf :: (a -> Bool) -> String -> FilePath -> IO a -> IO a
- throwErrnoPathIf_ :: (a -> Bool) -> String -> FilePath -> IO a -> IO ()
- throwErrnoPathIfNull :: String -> FilePath -> IO (Ptr a) -> IO (Ptr a)
- throwErrnoPathIfMinus1 :: (Eq a, Num a) => String -> FilePath -> IO a -> IO a
- throwErrnoPathIfMinus1_ :: (Eq a, Num a) => String -> FilePath -> IO a -> IO ()

# Haskell representations of `errno` values

newtype Errno Source

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

Constructors

Errno CInt |

Instances

Eq Errno |
Methods (==) :: Errno -> Errno -> Bool Source (/=) :: Errno -> Errno -> Bool Source

## Common `errno` symbols

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 Source

e2BIG :: Errno Source

eACCES :: Errno Source

eADDRINUSE :: Errno Source

eADDRNOTAVAIL :: Errno Source

eADV :: Errno Source

eAFNOSUPPORT :: Errno Source

eAGAIN :: Errno Source

eALREADY :: Errno Source

eBADF :: Errno Source

eBADMSG :: Errno Source

eBADRPC :: Errno Source

eBUSY :: Errno Source

eCHILD :: Errno Source

eCOMM :: Errno Source

eCONNABORTED :: Errno Source

eCONNREFUSED :: Errno Source

eCONNRESET :: Errno Source

eDEADLK :: Errno Source

eDESTADDRREQ :: Errno Source

eDIRTY :: Errno Source

eDOM :: Errno Source

eDQUOT :: Errno Source

eEXIST :: Errno Source

eFAULT :: Errno Source

eFBIG :: Errno Source

eFTYPE :: Errno Source

eHOSTDOWN :: Errno Source

eHOSTUNREACH :: Errno Source

eIDRM :: Errno Source

eILSEQ :: Errno Source

eINPROGRESS :: Errno Source

eINTR :: Errno Source

eINVAL :: Errno Source

eIO :: Errno Source

eISCONN :: Errno Source

eISDIR :: Errno Source

eLOOP :: Errno Source

eMFILE :: Errno Source

eMLINK :: Errno Source

eMSGSIZE :: Errno Source

eMULTIHOP :: Errno Source

eNAMETOOLONG :: Errno Source

eNETDOWN :: Errno Source

eNETRESET :: Errno Source

eNETUNREACH :: Errno Source

eNFILE :: Errno Source

eNOBUFS :: Errno Source

eNODATA :: Errno Source

eNODEV :: Errno Source

eNOENT :: Errno Source

eNOEXEC :: Errno Source

eNOLCK :: Errno Source

eNOLINK :: Errno Source

eNOMEM :: Errno Source

eNOMSG :: Errno Source

eNONET :: Errno Source

eNOPROTOOPT :: Errno Source

eNOSPC :: Errno Source

eNOSR :: Errno Source

eNOSTR :: Errno Source

eNOSYS :: Errno Source

eNOTBLK :: Errno Source

eNOTCONN :: Errno Source

eNOTDIR :: Errno Source

eNOTEMPTY :: Errno Source

eNOTSOCK :: Errno Source

eNOTSUP :: Errno Source

Since: 4.7.0.0

eNOTTY :: Errno Source

eNXIO :: Errno Source

eOPNOTSUPP :: Errno Source

ePERM :: Errno Source

ePFNOSUPPORT :: Errno Source

ePIPE :: Errno Source

ePROCLIM :: Errno Source

ePROCUNAVAIL :: Errno Source

ePROGMISMATCH :: Errno Source

ePROGUNAVAIL :: Errno Source

ePROTO :: Errno Source

ePROTONOSUPPORT :: Errno Source

ePROTOTYPE :: Errno Source

eRANGE :: Errno Source

eREMCHG :: Errno Source

eREMOTE :: Errno Source

eROFS :: Errno Source

eRPCMISMATCH :: Errno Source

eRREMOTE :: Errno Source

eSHUTDOWN :: Errno Source

eSOCKTNOSUPPORT :: Errno Source

eSPIPE :: Errno Source

eSRCH :: Errno Source

eSRMNT :: Errno Source

eSTALE :: Errno Source

eTIME :: Errno Source

eTIMEDOUT :: Errno Source

eTOOMANYREFS :: Errno Source

eTXTBSY :: Errno Source

eUSERS :: Errno Source

eWOULDBLOCK :: Errno Source

eXDEV :: Errno Source

## `Errno` functions

isValidErrno :: Errno -> Bool Source

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 Source

Get the current value of `errno` in the current thread.

resetErrno :: IO () Source

Reset the current thread's `errno` value to `eOK`.

errnoToIOError Source

Arguments

:: 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 Source

Arguments

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

Throw an `IOError` corresponding to the current value of `getErrno`.

## Guards for IO operations that may fail

throwErrnoIf Source

Arguments

:: (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 () Source

as `throwErrnoIf`, but discards the result of the `IO` action after error handling.

throwErrnoIfRetry :: (a -> Bool) -> String -> IO a -> IO a Source

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 () Source

as `throwErrnoIfRetry`, but discards the result.

throwErrnoIfMinus1 :: (Eq a, Num a) => String -> IO a -> IO a Source

Throw an `IOError` corresponding to the current value of `getErrno` if the `IO` action returns a result of `-1`.

throwErrnoIfMinus1_ :: (Eq a, Num a) => String -> IO a -> IO () Source

as `throwErrnoIfMinus1`, but discards the result.

throwErrnoIfMinus1Retry :: (Eq a, Num a) => String -> IO a -> IO a Source

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_ :: (Eq a, Num a) => String -> IO a -> IO () Source

as `throwErrnoIfMinus1`, but discards the result.

throwErrnoIfNull :: String -> IO (Ptr a) -> IO (Ptr a) Source

Throw an `IOError` corresponding to the current value of `getErrno` if the `IO` action returns `nullPtr`.

throwErrnoIfNullRetry :: String -> IO (Ptr a) -> IO (Ptr a) Source

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 Source

Arguments

:: (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 () Source

as `throwErrnoIfRetryMayBlock`, but discards the result.

throwErrnoIfMinus1RetryMayBlock :: (Eq a, Num a) => String -> IO a -> IO b -> IO a Source

as `throwErrnoIfMinus1Retry`, but checks for operations that would block.

throwErrnoIfMinus1RetryMayBlock_ :: (Eq a, Num a) => String -> IO a -> IO b -> IO () Source

as `throwErrnoIfMinus1RetryMayBlock`, but discards the result.

throwErrnoIfNullRetryMayBlock :: String -> IO (Ptr a) -> IO b -> IO (Ptr a) Source

as `throwErrnoIfNullRetry`, but checks for operations that would block.

throwErrnoPath :: String -> FilePath -> IO a Source

as `throwErrno`, but exceptions include the given path when appropriate.

throwErrnoPathIf :: (a -> Bool) -> String -> FilePath -> IO a -> IO a Source

as `throwErrnoIf`, but exceptions include the given path when appropriate.

throwErrnoPathIf_ :: (a -> Bool) -> String -> FilePath -> IO a -> IO () Source

as `throwErrnoIf_`, but exceptions include the given path when appropriate.

throwErrnoPathIfNull :: String -> FilePath -> IO (Ptr a) -> IO (Ptr a) Source

as `throwErrnoIfNull`, but exceptions include the given path when appropriate.

throwErrnoPathIfMinus1 :: (Eq a, Num a) => String -> FilePath -> IO a -> IO a Source

as `throwErrnoIfMinus1`, but exceptions include the given path when appropriate.

throwErrnoPathIfMinus1_ :: (Eq a, Num a) => String -> FilePath -> IO a -> IO () Source

as `throwErrnoIfMinus1_`, but exceptions include the given path when appropriate.