{-# LANGUAGE CPP #-} -- |Random and Binary IO with generic Iteratees. module Data.Iteratee.IO( -- * File enumerators -- ** Handle-based enumerators enumHandle, enumHandleRandom, #if defined(USE_POSIX) -- ** FileDescriptor based enumerators enumFd, enumFdRandom, #endif -- * Iteratee drivers -- These are FileDescriptor-based on POSIX systems, otherwise they are -- Handle-based. The Handle-based drivers are accessible on POSIX systems -- at Data.Iteratee.IO.Handle fileDriver, fileDriverVBuf, fileDriverRandom, fileDriverRandomVBuf, ) where import Data.Iteratee.Base.ReadableChunk import Data.Iteratee.Iteratee import Data.Iteratee.Binary() import Data.Iteratee.IO.Handle #if defined(USE_POSIX) import Data.Iteratee.IO.Fd #endif import Control.Monad.CatchIO defaultBufSize :: Int defaultBufSize = 1024 -- If Posix is available, use the fileDriverRandomFd as fileDriverRandom. Otherwise, use a handle-based variant. #if defined(USE_POSIX) -- |Process a file using the given Iteratee. This function wraps -- enumFd as a convenience. fileDriver :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriver = fileDriverFd defaultBufSize -- |A version of fileDriver with a user-specified buffer size (in elements). fileDriverVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a fileDriverVBuf = fileDriverFd -- |Process a file using the given Iteratee. This function wraps -- enumFdRandom as a convenience. fileDriverRandom :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriverRandom = fileDriverRandomFd defaultBufSize fileDriverRandomVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a fileDriverRandomVBuf = fileDriverRandomFd #else -- ----------------------------------------------- -- Handle-based operations for compatibility. -- |Process a file using the given Iteratee. This function wraps -- @enumHandle@ as a convenience. fileDriver :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriver = fileDriverHandle defaultBufSize -- |A version of fileDriver with a user-specified buffer size (in elements). fileDriverVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a fileDriverVBuf = fileDriverHandle -- |Process a file using the given Iteratee. This function wraps -- @enumRandomHandle@ as a convenience. fileDriverRandom :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Iteratee s m a -> FilePath -> m a fileDriverRandom = fileDriverRandomHandle defaultBufSize fileDriverRandomVBuf :: (MonadCatchIO m, NullPoint s, ReadableChunk s el) => Int -> Iteratee s m a -> FilePath -> m a fileDriverRandomVBuf = fileDriverRandomHandle #endif