{-# LANGUAGE CPP #-}
-- | The standard @openFile@ call on Windows causing problematic file locking-- in some cases. This module provides a cross-platform file reading API-- without the file locking problems on Windows.---- This module /always/ opens files in binary mode.---- @readChunk@ will return an empty @ByteString@ on EOF.
module Data.Streaming.FileRead
( ReadHandle
, openFile
, closeFile
, readChunk
) where
#if WINDOWS
import System.Win32File
#else
import qualified System.IO as IO
import qualified Data.ByteString as S
import Data.ByteString.Lazy.Internal (defaultChunkSize)
newtype ReadHandle = ReadHandleIO.HandleopenFile :: FilePath -> IOReadHandleopenFilefp = ReadHandle`fmap`IO.openBinaryFilefpIO.ReadModecloseFile :: ReadHandle -> IO()closeFile (ReadHandleh) = IO.hClosehreadChunk :: ReadHandle -> IOS.ByteStringreadChunk (ReadHandleh) = S.hGetSomehdefaultChunkSize
#endif