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 :: FilePath -> (InputStream ByteString -> m a) -> m a withFileAsInput FilePath fp InputStream ByteString -> m a m = ((forall a. m a -> IO a) -> IO a) -> m a forall (m :: * -> *) b. MonadUnliftIO m => ((forall a. m a -> IO a) -> IO b) -> m b withRunInIO (((forall a. m a -> IO a) -> IO a) -> m a) -> ((forall a. m a -> IO a) -> IO a) -> m a forall a b. (a -> b) -> a -> b $ \forall a. m a -> IO a io -> FilePath -> (InputStream ByteString -> IO a) -> IO a forall a. FilePath -> (InputStream ByteString -> IO a) -> IO a SF.withFileAsInput FilePath fp (m a -> IO a forall a. m a -> IO a io (m a -> IO a) -> (InputStream ByteString -> m a) -> InputStream ByteString -> IO a forall b c a. (b -> c) -> (a -> b) -> a -> c . InputStream ByteString -> m a m) {-# INLINE withFileAsOutput #-} withFileAsOutput :: (MonadUnliftIO m) => FilePath -> (OutputStream ByteString -> m a) -> m a withFileAsOutput :: FilePath -> (OutputStream ByteString -> m a) -> m a withFileAsOutput FilePath fp OutputStream ByteString -> m a m = ((forall a. m a -> IO a) -> IO a) -> m a forall (m :: * -> *) b. MonadUnliftIO m => ((forall a. m a -> IO a) -> IO b) -> m b withRunInIO (((forall a. m a -> IO a) -> IO a) -> m a) -> ((forall a. m a -> IO a) -> IO a) -> m a forall a b. (a -> b) -> a -> b $ \forall a. m a -> IO a io -> FilePath -> (OutputStream ByteString -> IO a) -> IO a forall a. FilePath -> (OutputStream ByteString -> IO a) -> IO a SF.withFileAsOutput FilePath fp (m a -> IO a forall a. m a -> IO a io (m a -> IO a) -> (OutputStream ByteString -> m a) -> OutputStream ByteString -> IO a forall b c a. (b -> c) -> (a -> b) -> a -> c . OutputStream ByteString -> m a m) {-# INLINE withFileAsOutputExt #-} withFileAsOutputExt :: (MonadUnliftIO m) => FilePath -> IOMode -> BufferMode -> (OutputStream ByteString -> m a) -> m a withFileAsOutputExt :: FilePath -> IOMode -> BufferMode -> (OutputStream ByteString -> m a) -> m a withFileAsOutputExt FilePath fp IOMode ioMode BufferMode bufMode OutputStream ByteString -> m a m = ((forall a. m a -> IO a) -> IO a) -> m a forall (m :: * -> *) b. MonadUnliftIO m => ((forall a. m a -> IO a) -> IO b) -> m b withRunInIO (((forall a. m a -> IO a) -> IO a) -> m a) -> ((forall a. m a -> IO a) -> IO a) -> m a forall a b. (a -> b) -> a -> b $ \forall a. m a -> IO a io -> FilePath -> IOMode -> BufferMode -> (OutputStream ByteString -> IO a) -> IO a forall a. FilePath -> IOMode -> BufferMode -> (OutputStream ByteString -> IO a) -> IO a SF.withFileAsOutputExt FilePath fp IOMode ioMode BufferMode bufMode (m a -> IO a forall a. m a -> IO a io (m a -> IO a) -> (OutputStream ByteString -> m a) -> OutputStream ByteString -> IO a forall b c a. (b -> c) -> (a -> b) -> a -> c . OutputStream ByteString -> m a m)