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