module UnliftIO.Streams.List ( chunkList , chunkListWith , fromList , toList ) where import Control.Monad.IO.Unlift (MonadUnliftIO, liftIO) import Prelude hiding (map) import System.IO.Streams (InputStream) import qualified System.IO.Streams.List as SL {-# INLINE chunkList #-} chunkList :: (MonadUnliftIO m) => Int -> InputStream a -> m (InputStream [a]) chunkList :: Int -> InputStream a -> m (InputStream [a]) chunkList Int n InputStream a is = IO (InputStream [a]) -> m (InputStream [a]) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (InputStream [a]) -> m (InputStream [a])) -> IO (InputStream [a]) -> m (InputStream [a]) forall a b. (a -> b) -> a -> b $ Int -> InputStream a -> IO (InputStream [a]) forall a. Int -> InputStream a -> IO (InputStream [a]) SL.chunkList Int n InputStream a is {-# INLINE chunkListWith #-} chunkListWith :: (MonadUnliftIO m) => (a -> Int -> Bool) -> InputStream a -> m (InputStream [a]) chunkListWith :: (a -> Int -> Bool) -> InputStream a -> m (InputStream [a]) chunkListWith a -> Int -> Bool p InputStream a is = IO (InputStream [a]) -> m (InputStream [a]) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (InputStream [a]) -> m (InputStream [a])) -> IO (InputStream [a]) -> m (InputStream [a]) forall a b. (a -> b) -> a -> b $ (a -> Int -> Bool) -> InputStream a -> IO (InputStream [a]) forall a. (a -> Int -> Bool) -> InputStream a -> IO (InputStream [a]) SL.chunkListWith a -> Int -> Bool p InputStream a is {-# INLINE toList #-} toList :: (MonadUnliftIO m) => InputStream a -> m [a] toList :: InputStream a -> m [a] toList = IO [a] -> m [a] forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO [a] -> m [a]) -> (InputStream a -> IO [a]) -> InputStream a -> m [a] forall b c a. (b -> c) -> (a -> b) -> a -> c . InputStream a -> IO [a] forall a. InputStream a -> IO [a] SL.toList {-# INLINE fromList #-} fromList :: (MonadUnliftIO m) => [a] -> m (InputStream a) fromList :: [a] -> m (InputStream a) fromList = IO (InputStream a) -> m (InputStream a) forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO (InputStream a) -> m (InputStream a)) -> ([a] -> IO (InputStream a)) -> [a] -> m (InputStream a) forall b c a. (b -> c) -> (a -> b) -> a -> c . [a] -> IO (InputStream a) forall c. [c] -> IO (InputStream c) SL.fromList