module UnliftIO.Streams.File ( withFileAsInput , withFileAsOutput , withFileAsOutputExt ) where import Control.Monad.IO.Unlift (MonadUnliftIO, withRunInIO) import Data.ByteString (ByteString) import System.IO (BufferMode, FilePath, IOMode) import System.IO.Streams (InputStream, OutputStream) import qualified System.IO.Streams.File as SF {-# INLINE withFileAsInput #-} withFileAsInput :: (MonadUnliftIO m) => FilePath -> (InputStream ByteString -> m a) -> m a withFileAsInput fp m = withRunInIO $ \io -> SF.withFileAsInput fp (io . m) {-# INLINE withFileAsOutput #-} withFileAsOutput :: (MonadUnliftIO m) => FilePath -> (OutputStream ByteString -> m a) -> m a withFileAsOutput fp m = withRunInIO $ \io -> SF.withFileAsOutput fp (io . m) {-# INLINE withFileAsOutputExt #-} withFileAsOutputExt :: (MonadUnliftIO m) => FilePath -> IOMode -> BufferMode -> (OutputStream ByteString -> m a) -> m a withFileAsOutputExt fp ioMode bufMode m = withRunInIO $ \io -> SF.withFileAsOutputExt fp ioMode bufMode (io . m)