module Data.ByteString.Streaming.Split where
import Data.ByteString.Streaming.Char8 as S8
import Data.ByteString.Streaming.Internal as SI
import Streaming.Internal (Stream(..))
splitsByteStringAt ∷ Monad m ⇒ Int → ByteString m r → Stream (ByteString m) m r
splitsByteStringAt :: Int -> ByteString m r -> Stream (ByteString m) m r
splitsByteStringAt !Int
k = ByteString m r -> Stream (ByteString m) m r
loop where
loop :: ByteString m r -> Stream (ByteString m) m r
loop (Empty r
r) = r -> Stream (ByteString m) m r
forall (m :: * -> *) a. Monad m => a -> m a
return r
r
loop ByteString m r
p = ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r
forall (f :: * -> *) (m :: * -> *) r.
f (Stream f m r) -> Stream f m r
Step (ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r)
-> ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r
forall a b. (a -> b) -> a -> b
$ (ByteString m r -> Stream (ByteString m) m r)
-> ByteStream m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString m r -> Stream (ByteString m) m r
loop (ByteStream m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r))
-> ByteStream m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r)
forall a b. (a -> b) -> a -> b
$ Int64 -> ByteString m r -> ByteStream m (ByteString m r)
forall (m :: * -> *) r.
Monad m =>
Int64 -> ByteStream m r -> ByteStream m (ByteStream m r)
S8.splitAt (Int -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
k) ByteString m r
p
{-# Inlinable splitsByteStringAt #-}
separatesByteString
∷ Monad m
⇒ (ByteString m r → ByteString m (ByteString m r))
→ ByteString m r
→ Stream (ByteString m) m r
separatesByteString :: (ByteString m r -> ByteString m (ByteString m r))
-> ByteString m r -> Stream (ByteString m) m r
separatesByteString ByteString m r -> ByteString m (ByteString m r)
f = ByteString m r -> Stream (ByteString m) m r
loop where
loop :: ByteString m r -> Stream (ByteString m) m r
loop (Empty r
r) = r -> Stream (ByteString m) m r
forall (m :: * -> *) a. Monad m => a -> m a
return r
r
loop ByteString m r
p = ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r
forall (f :: * -> *) (m :: * -> *) r.
f (Stream f m r) -> Stream f m r
Step (ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r)
-> ByteStream m (Stream (ByteString m) m r)
-> Stream (ByteString m) m r
forall a b. (a -> b) -> a -> b
$ (ByteString m r -> Stream (ByteString m) m r)
-> ByteString m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString m r -> Stream (ByteString m) m r
loop (ByteString m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r))
-> ByteString m (ByteString m r)
-> ByteStream m (Stream (ByteString m) m r)
forall a b. (a -> b) -> a -> b
$ ByteString m r -> ByteString m (ByteString m r)
f ByteString m r
p
{-# Inlinable separatesByteString #-}