{-# LANGUAGE CPP #-}
module Streamly.Internal.Data.Stream.Nesting
(
AppendState(..)
, append
, InterleaveState(..)
, interleave
, interleaveEndBy'
, interleaveSepBy'
, interleaveBeginBy
, interleaveEndBy
, interleaveSepBy
, roundRobin
, mergeBy
, mergeByM
, mergeMinBy
, mergeFstBy
, unfoldEachFoldBy
, ConcatUnfoldInterleaveState (..)
, unfoldEachInterleave
, unfoldEachInterleaveRev
, unfoldEachRoundRobin
, unfoldEachSepBy
, unfoldEachSepByM
, unfoldEachEndBy
, unfoldEachEndByM
, unfoldEachSepBySeq
, unfoldEachEndBySeq
, intercalateSepBy
, intercalateEndBy
, foldSequence
, foldIterateM
, parseMany
, parseSequence
, parseManyTill
, parseIterate
, groupsWhile
, groupsRollingBy
, takeEndBySeq
, takeEndBySeq_
, wordsBy
, splitSepBySeq_
, splitEndBySeq
, splitEndBySeq_
, splitOnSuffixSeq
, splitBeginBy_
, splitEndBySeqOneOf
, splitSepBySeqOneOf
, splitInnerBy
, splitInnerBySuffix
, dropPrefix
, dropInfix
, dropSuffix
, interpose
, interposeM
, interposeSuffix
, interposeSuffixM
, gintercalate
, gintercalateSuffix
, intercalate
, intercalateSuffix
, unfoldInterleave
, unfoldRoundRobin
, interleaveMin
, interleaveFst
, interleaveFstSuffix
, parseManyD
, parseIterateD
, groupsBy
, splitOnSeq
)
where
#include "deprecation.h"
#include "inline.hs"
#include "ArrayMacros.h"
import Control.Exception (assert)
import Control.Monad.IO.Class (MonadIO(..))
import Data.Bits (shiftR, shiftL, (.|.), (.&.))
import Data.Proxy (Proxy(..))
import Data.Word (Word32)
import Fusion.Plugin.Types (Fuse(..))
import GHC.Types (SPEC(..))
import Streamly.Internal.Data.Array.Type (Array(..))
import Streamly.Internal.Data.Fold.Type (Fold(..))
import Streamly.Internal.Data.MutArray.Type (MutArray(..))
import Streamly.Internal.Data.Parser (ParseError(..))
import Streamly.Internal.Data.RingArray (RingArray(..))
import Streamly.Internal.Data.SVar.Type (adaptState)
import Streamly.Internal.Data.Unbox (Unbox(..))
import Streamly.Internal.Data.Unfold.Type (Unfold(..))
import qualified Streamly.Internal.Data.Array.Type as A
import qualified Streamly.Internal.Data.MutArray.Type as MutArray
import qualified Streamly.Internal.Data.Fold as FL
import qualified Streamly.Internal.Data.Parser as PR
import qualified Streamly.Internal.Data.Parser as PRD
import qualified Streamly.Internal.Data.RingArray as RB
import qualified Streamly.Internal.Data.Stream.Generate as Stream
import qualified Streamly.Internal.Data.Unfold.Type as Unfold
import Streamly.Internal.Data.Stream.Transform
(intersperse, intersperseEndByM)
import Streamly.Internal.Data.Stream.Type
import Prelude hiding (concatMap, mapM, zipWith)
#include "DocTestDataStream.hs"
data AppendState s1 s2 = AppendFirst s1 | AppendSecond s2
{-# INLINE_NORMAL append #-}
append :: Monad m => Stream m a -> Stream m a -> Stream m a
append :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
append (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) =
(State StreamK m a
-> AppendState s s -> m (Step (AppendState s s) a))
-> AppendState s s -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> AppendState s s -> m (Step (AppendState s s) a)
step (s -> AppendState s s
forall s1 s2. s1 -> AppendState s1 s2
AppendFirst s
state1)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> AppendState s s -> m (Step (AppendState s s) a)
step State StreamK m a
gst (AppendFirst s
st) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st
Step (AppendState s s) a -> m (Step (AppendState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (AppendState s s) a -> m (Step (AppendState s s) a))
-> Step (AppendState s s) a -> m (Step (AppendState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> AppendState s s -> Step (AppendState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> AppendState s s
forall s1 s2. s1 -> AppendState s1 s2
AppendFirst s
s)
Skip s
s -> AppendState s s -> Step (AppendState s s) a
forall s a. s -> Step s a
Skip (s -> AppendState s s
forall s1 s2. s1 -> AppendState s1 s2
AppendFirst s
s)
Step s a
Stop -> AppendState s s -> Step (AppendState s s) a
forall s a. s -> Step s a
Skip (s -> AppendState s s
forall s1 s2. s2 -> AppendState s1 s2
AppendSecond s
state2)
step State StreamK m a
gst (AppendSecond s
st) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st
Step (AppendState s s) a -> m (Step (AppendState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (AppendState s s) a -> m (Step (AppendState s s) a))
-> Step (AppendState s s) a -> m (Step (AppendState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> AppendState s s -> Step (AppendState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> AppendState s s
forall s1 s2. s2 -> AppendState s1 s2
AppendSecond s
s)
Skip s
s -> AppendState s s -> Step (AppendState s s) a
forall s a. s -> Step s a
Skip (s -> AppendState s s
forall s1 s2. s2 -> AppendState s1 s2
AppendSecond s
s)
Step s a
Stop -> Step (AppendState s s) a
forall s a. Step s a
Stop
data InterleaveState s1 s2 = InterleaveFirst s1 s2 | InterleaveSecond s1 s2
| InterleaveSecondOnly s2 | InterleaveFirstOnly s1
{-# INLINE_NORMAL interleave #-}
interleave :: Monad m => Stream m a -> Stream m a -> Stream m a
interleave :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleave (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) =
(State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a))
-> InterleaveState s s -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step State StreamK m a
gst (InterleaveFirst s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
s s
st2)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
s s
st2)
Step s a
Stop -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
st2)
step State StreamK m a
gst (InterleaveSecond s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
st1 s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
st1 s
s)
Step s a
Stop -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
st1)
step State StreamK m a
gst (InterleaveFirstOnly s
st1) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
gst (InterleaveSecondOnly s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
{-# ANN module "HLint: ignore Use zip" #-}
{-# INLINE_NORMAL interleaveEndBy' #-}
interleaveEndBy' :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveEndBy' :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveEndBy' Stream m a
s1 Stream m a
s2 = Unfold m (a, a) a -> Stream m (a, a) -> Stream m a
forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEach Unfold m (a, a) a
forall (m :: * -> *) a. Applicative m => Unfold m (a, a) a
Unfold.fromTuple (Stream m (a, a) -> Stream m a) -> Stream m (a, a) -> Stream m a
forall a b. (a -> b) -> a -> b
$ (a -> a -> (a, a)) -> Stream m a -> Stream m a -> Stream m (a, a)
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> c) -> Stream m a -> Stream m b -> Stream m c
zipWith (,) Stream m a
s2 Stream m a
s1
{-# DEPRECATED interleaveMin "Please use flip interleaveEndBy' instead." #-}
{-# INLINE_NORMAL interleaveMin #-}
interleaveMin :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveMin :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveMin (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) =
(State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a))
-> InterleaveState s s -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step State StreamK m a
gst (InterleaveFirst s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
s s
st2)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
s s
st2)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
gst (InterleaveSecond s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
st1 s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
st1 s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
_ (InterleaveFirstOnly s
_) = m (Step (InterleaveState s s) a)
forall a. HasCallStack => a
undefined
step State StreamK m a
_ (InterleaveSecondOnly s
_) = m (Step (InterleaveState s s) a)
forall a. HasCallStack => a
undefined
{-# INLINE_NORMAL interleaveSepBy' #-}
interleaveSepBy' :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveSepBy' :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveSepBy' Stream m a
s1 Stream m a
s2 = m (Stream m a) -> Stream m a
forall (m :: * -> *) a. Monad m => m (Stream m a) -> Stream m a
concatEffect (m (Stream m a) -> Stream m a) -> m (Stream m a) -> Stream m a
forall a b. (a -> b) -> a -> b
$ do
Maybe (a, Stream m a)
r <- Stream m a -> m (Maybe (a, Stream m a))
forall (m :: * -> *) a.
Monad m =>
Stream m a -> m (Maybe (a, Stream m a))
uncons Stream m a
s2
case Maybe (a, Stream m a)
r of
Maybe (a, Stream m a)
Nothing -> Stream m a -> m (Stream m a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Stream m a
forall (m :: * -> *) a. Applicative m => Stream m a
Stream.nil
Just (a
h, Stream m a
t) ->
Stream m a -> m (Stream m a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Stream m a -> m (Stream m a)) -> Stream m a -> m (Stream m a)
forall a b. (a -> b) -> a -> b
$ a
h a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
Applicative m =>
a -> Stream m a -> Stream m a
`Stream.cons`
Unfold m (a, a) a -> Stream m (a, a) -> Stream m a
forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEach Unfold m (a, a) a
forall (m :: * -> *) a. Applicative m => Unfold m (a, a) a
Unfold.fromTuple ((a -> a -> (a, a)) -> Stream m a -> Stream m a -> Stream m (a, a)
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> c) -> Stream m a -> Stream m b -> Stream m c
zipWith (,) Stream m a
s1 Stream m a
t)
{-# INLINE_NORMAL interleaveBeginBy #-}
interleaveBeginBy ::
Stream m a -> Stream m a -> Stream m a
interleaveBeginBy :: forall (m :: * -> *) a. Stream m a -> Stream m a -> Stream m a
interleaveBeginBy = Stream m a -> Stream m a -> Stream m a
forall a. HasCallStack => a
undefined
{-# INLINE_NORMAL interleaveEndBy #-}
interleaveEndBy :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveEndBy :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveEndBy (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) =
(State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a))
-> InterleaveState s s -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step State StreamK m a
gst (InterleaveFirst s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
s s
st2)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
s s
st2)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
gst (InterleaveSecond s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
st1 s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
st1 s
s)
Step s a
Stop -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
st1)
step State StreamK m a
gst (InterleaveFirstOnly s
st1) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
_ (InterleaveSecondOnly s
_) = m (Step (InterleaveState s s) a)
forall a. HasCallStack => a
undefined
{-# INLINE interleaveFstSuffix #-}
{-# DEPRECATED interleaveFstSuffix "Please use flip interleaveEndBy instead." #-}
interleaveFstSuffix :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveFstSuffix :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveFstSuffix = (Stream m a -> Stream m a -> Stream m a)
-> Stream m a -> Stream m a -> Stream m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip Stream m a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveEndBy
data InterleaveInfixState s1 s2 a
= InterleaveInfixFirst s1 s2
| InterleaveInfixSecondBuf s1 s2
| InterleaveInfixSecondYield s1 s2 a
| InterleaveInfixFirstYield s1 s2 a
| InterleaveInfixFirstOnly s1
{-# INLINE_NORMAL interleaveSepBy #-}
interleaveSepBy :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveSepBy :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveSepBy (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) =
(State StreamK m a
-> InterleaveInfixState s s a
-> m (Step (InterleaveInfixState s s a) a))
-> InterleaveInfixState s s a -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> InterleaveInfixState s s a
-> m (Step (InterleaveInfixState s s a) a)
step (s -> s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> InterleaveInfixState s1 s2 a
InterleaveInfixFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterleaveInfixState s s a
-> m (Step (InterleaveInfixState s s a) a)
step State StreamK m a
gst (InterleaveInfixFirst s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a))
-> Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a
-> InterleaveInfixState s s a
-> Step (InterleaveInfixState s s a) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> InterleaveInfixState s1 s2 a
InterleaveInfixSecondBuf s
s s
st2)
Skip s
s -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> InterleaveInfixState s1 s2 a
InterleaveInfixFirst s
s s
st2)
Step s a
Stop -> Step (InterleaveInfixState s s a) a
forall s a. Step s a
Stop
step State StreamK m a
gst (InterleaveInfixSecondBuf s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a))
-> Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> s -> a -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> a -> InterleaveInfixState s1 s2 a
InterleaveInfixSecondYield s
st1 s
s a
a)
Skip s
s -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> InterleaveInfixState s1 s2 a
InterleaveInfixSecondBuf s
st1 s
s)
Step s a
Stop -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> InterleaveInfixState s1 s2 a
InterleaveInfixFirstOnly s
st1)
step State StreamK m a
gst (InterleaveInfixSecondYield s
st1 s
st2 a
x) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a))
-> Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a
-> InterleaveInfixState s s a
-> Step (InterleaveInfixState s s a) a
forall s a. a -> s -> Step s a
Yield a
x (s -> s -> a -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> a -> InterleaveInfixState s1 s2 a
InterleaveInfixFirstYield s
s s
st2 a
a)
Skip s
s -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> s -> a -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> a -> InterleaveInfixState s1 s2 a
InterleaveInfixSecondYield s
s s
st2 a
x)
Step s a
Stop -> Step (InterleaveInfixState s s a) a
forall s a. Step s a
Stop
step State StreamK m a
_ (InterleaveInfixFirstYield s
st1 s
st2 a
x) = do
Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a))
-> Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a b. (a -> b) -> a -> b
$ a
-> InterleaveInfixState s s a
-> Step (InterleaveInfixState s s a) a
forall s a. a -> s -> Step s a
Yield a
x (s -> s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> s2 -> InterleaveInfixState s1 s2 a
InterleaveInfixSecondBuf s
st1 s
st2)
step State StreamK m a
gst (InterleaveInfixFirstOnly s
st1) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a))
-> Step (InterleaveInfixState s s a) a
-> m (Step (InterleaveInfixState s s a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a
-> InterleaveInfixState s s a
-> Step (InterleaveInfixState s s a) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> InterleaveInfixState s1 s2 a
InterleaveInfixFirstOnly s
s)
Skip s
s -> InterleaveInfixState s s a -> Step (InterleaveInfixState s s a) a
forall s a. s -> Step s a
Skip (s -> InterleaveInfixState s s a
forall s1 s2 a. s1 -> InterleaveInfixState s1 s2 a
InterleaveInfixFirstOnly s
s)
Step s a
Stop -> Step (InterleaveInfixState s s a) a
forall s a. Step s a
Stop
{-# DEPRECATED interleaveFst "Please use flip interleaveSepBy instead." #-}
{-# INLINE_NORMAL interleaveFst #-}
interleaveFst :: Monad m => Stream m a -> Stream m a -> Stream m a
interleaveFst :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveFst = (Stream m a -> Stream m a -> Stream m a)
-> Stream m a -> Stream m a -> Stream m a
forall a b c. (a -> b -> c) -> b -> a -> c
flip Stream m a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
interleaveSepBy
{-# INLINE_NORMAL roundRobin #-}
roundRobin :: Monad m => Stream m a -> Stream m a -> Stream m a
roundRobin :: forall (m :: * -> *) a.
Monad m =>
Stream m a -> Stream m a -> Stream m a
roundRobin (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2) =
(State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a))
-> InterleaveState s s -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterleaveState s s -> m (Step (InterleaveState s s) a)
step State StreamK m a
gst (InterleaveFirst s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
s s
st2)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveSecond s
s s
st2)
Step s a
Stop -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
st2)
step State StreamK m a
gst (InterleaveSecond s
st1 s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
st1 s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> s -> InterleaveState s s
forall s1 s2. s1 -> s2 -> InterleaveState s1 s2
InterleaveFirst s
st1 s
s)
Step s a
Stop -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
st1)
step State StreamK m a
gst (InterleaveSecondOnly s
st2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 State StreamK m a
gst s
st2
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s2 -> InterleaveState s1 s2
InterleaveSecondOnly s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
step State StreamK m a
gst (InterleaveFirstOnly s
st1) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 State StreamK m a
gst s
st1
Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a))
-> Step (InterleaveState s s) a -> m (Step (InterleaveState s s) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
s -> a -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. a -> s -> Step s a
Yield a
a (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Skip s
s -> InterleaveState s s -> Step (InterleaveState s s) a
forall s a. s -> Step s a
Skip (s -> InterleaveState s s
forall s1 s2. s1 -> InterleaveState s1 s2
InterleaveFirstOnly s
s)
Step s a
Stop -> Step (InterleaveState s s) a
forall s a. Step s a
Stop
{-# INLINE_NORMAL mergeByM #-}
mergeByM
:: (Monad m)
=> (a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeByM :: forall (m :: * -> *) a.
Monad m =>
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeByM a -> a -> m Ordering
cmp (Stream State StreamK m a -> s -> m (Step s a)
stepa s
ta) (Stream State StreamK m a -> s -> m (Step s a)
stepb s
tb) =
(State StreamK m a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> (Maybe s, Maybe s, Maybe a, Maybe a) -> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
step (s -> Maybe s
forall a. a -> Maybe a
Just s
ta, s -> Maybe s
forall a. a -> Maybe a
Just s
tb, Maybe a
forall a. Maybe a
Nothing, Maybe a
forall a. Maybe a
Nothing)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
step State StreamK m a
gst (Just s
sa, Maybe s
sb, Maybe a
Nothing, Maybe a
b) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
stepa State StreamK m a
gst s
sa
Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
a s
sa' -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (s -> Maybe s
forall a. a -> Maybe a
Just s
sa', Maybe s
sb, a -> Maybe a
forall a. a -> Maybe a
Just a
a, Maybe a
b)
Skip s
sa' -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (s -> Maybe s
forall a. a -> Maybe a
Just s
sa', Maybe s
sb, Maybe a
forall a. Maybe a
Nothing, Maybe a
b)
Step s a
Stop -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (Maybe s
forall a. Maybe a
Nothing, Maybe s
sb, Maybe a
forall a. Maybe a
Nothing, Maybe a
b)
step State StreamK m a
gst (Maybe s
sa, Just s
sb, Maybe a
a, Maybe a
Nothing) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
stepb State StreamK m a
gst s
sb
Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a b. (a -> b) -> a -> b
$ case Step s a
r of
Yield a
b s
sb' -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (Maybe s
sa, s -> Maybe s
forall a. a -> Maybe a
Just s
sb', Maybe a
a, a -> Maybe a
forall a. a -> Maybe a
Just a
b)
Skip s
sb' -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (Maybe s
sa, s -> Maybe s
forall a. a -> Maybe a
Just s
sb', Maybe a
a, Maybe a
forall a. Maybe a
Nothing)
Step s a
Stop -> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. s -> Step s a
Skip (Maybe s
sa, Maybe s
forall a. Maybe a
Nothing, Maybe a
a, Maybe a
forall a. Maybe a
Nothing)
step State StreamK m a
_ (Maybe s
sa, Maybe s
sb, Just a
a, Just a
b) = do
Ordering
res <- a -> a -> m Ordering
cmp a
a a
b
Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a b. (a -> b) -> a -> b
$ case Ordering
res of
Ordering
GT -> a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. a -> s -> Step s a
Yield a
b (Maybe s
sa, Maybe s
sb, a -> Maybe a
forall a. a -> Maybe a
Just a
a, Maybe a
forall a. Maybe a
Nothing)
Ordering
_ -> a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. a -> s -> Step s a
Yield a
a (Maybe s
sa, Maybe s
sb, Maybe a
forall a. Maybe a
Nothing, a -> Maybe a
forall a. a -> Maybe a
Just a
b)
step State StreamK m a
_ (Maybe s
Nothing, Maybe s
sb, Maybe a
Nothing, Just a
b) =
Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a b. (a -> b) -> a -> b
$ a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. a -> s -> Step s a
Yield a
b (Maybe s
forall a. Maybe a
Nothing, Maybe s
sb, Maybe a
forall a. Maybe a
Nothing, Maybe a
forall a. Maybe a
Nothing)
step State StreamK m a
_ (Maybe s
sa, Maybe s
Nothing, Just a
a, Maybe a
Nothing) =
Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a))
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a b. (a -> b) -> a -> b
$ a
-> (Maybe s, Maybe s, Maybe a, Maybe a)
-> Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. a -> s -> Step s a
Yield a
a (Maybe s
sa, Maybe s
forall a. Maybe a
Nothing, Maybe a
forall a. Maybe a
Nothing, Maybe a
forall a. Maybe a
Nothing)
step State StreamK m a
_ (Maybe s
Nothing, Maybe s
Nothing, Maybe a
Nothing, Maybe a
Nothing) = Step (Maybe s, Maybe s, Maybe a, Maybe a) a
-> m (Step (Maybe s, Maybe s, Maybe a, Maybe a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (Maybe s, Maybe s, Maybe a, Maybe a) a
forall s a. Step s a
Stop
{-# INLINE mergeBy #-}
mergeBy
:: (Monad m)
=> (a -> a -> Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeBy :: forall (m :: * -> *) a.
Monad m =>
(a -> a -> Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeBy a -> a -> Ordering
cmp = (a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
Monad m =>
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeByM (\a
a a
b -> Ordering -> m Ordering
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Ordering -> m Ordering) -> Ordering -> m Ordering
forall a b. (a -> b) -> a -> b
$ a -> a -> Ordering
cmp a
a a
b)
{-# INLINABLE mergeMinBy #-}
mergeMinBy ::
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeMinBy :: forall a (m :: * -> *).
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeMinBy a -> a -> m Ordering
_f Stream m a
_m1 Stream m a
_m2 = Stream m a
forall a. HasCallStack => a
undefined
{-# INLINABLE mergeFstBy #-}
mergeFstBy ::
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeFstBy :: forall a (m :: * -> *).
(a -> a -> m Ordering) -> Stream m a -> Stream m a -> Stream m a
mergeFstBy a -> a -> m Ordering
_f Stream m a
_m1 Stream m a
_m2 = Stream m a
forall a. HasCallStack => a
undefined
{-# INLINE_NORMAL unfoldEachFoldBy #-}
unfoldEachFoldBy ::
Fold m b c -> Unfold m a b -> Stream m a -> Stream m c
unfoldEachFoldBy :: forall (m :: * -> *) b c a.
Fold m b c -> Unfold m a b -> Stream m a -> Stream m c
unfoldEachFoldBy = Fold m b c -> Unfold m a b -> Stream m a -> Stream m c
forall a. HasCallStack => a
undefined
data ConcatUnfoldInterleaveState o i =
ConcatUnfoldInterleaveOuter o [i]
| ConcatUnfoldInterleaveInner o [i]
| ConcatUnfoldInterleaveInnerL [i] [i]
| ConcatUnfoldInterleaveInnerR [i] [i]
{-# INLINE_NORMAL unfoldEachInterleave #-}
unfoldEachInterleave :: Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachInterleave :: forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachInterleave (Unfold s -> m (Step s b)
istep a -> m s
inject) (Stream State StreamK m a -> s -> m (Step s a)
ostep s
ost) =
(State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> ConcatUnfoldInterleaveState s s -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
ost [])
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step State StreamK m a
gst (ConcatUnfoldInterleaveOuter s
o [s]
ls) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
ostep (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
o
case Step s a
r of
Yield a
a s
o' -> do
s
i <- a -> m s
inject a
a
s
i s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. a -> b -> b
`seq` Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o' (s
i s -> [s] -> [s]
forall a. a -> [a] -> [a]
: [s]
ls)))
Skip s
o' -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o' [s]
ls)
Step s a
Stop -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL ([s] -> [s]
forall a. [a] -> [a]
reverse [s]
ls) [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
_ []) = m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. HasCallStack => a
undefined
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
o (s
st:[s]
ls)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o [s]
ls)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] [s]
rs) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [] ([s] -> [s]
forall a. [a] -> [a]
reverse [s]
rs))
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL (s
st:[s]
ls) [s]
rs) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [s]
rs)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls []) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL ([s] -> [s]
forall a. [a] -> [a]
reverse [s]
ls) [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls (s
st:[s]
rs)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [s]
ls [s]
rs)
{-# INLINE_NORMAL unfoldEachInterleaveRev #-}
unfoldEachInterleaveRev, unfoldInterleave :: Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachInterleaveRev :: forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachInterleaveRev (Unfold s -> m (Step s b)
istep a -> m s
inject) (Stream State StreamK m a -> s -> m (Step s a)
ostep s
ost) =
(State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> ConcatUnfoldInterleaveState s s -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
ost [])
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step State StreamK m a
gst (ConcatUnfoldInterleaveOuter s
o [s]
ls) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
ostep (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
o
case Step s a
r of
Yield a
a s
o' -> do
s
i <- a -> m s
inject a
a
s
i s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. a -> b -> b
`seq` Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o' (s
i s -> [s] -> [s]
forall a. a -> [a] -> [a]
: [s]
ls)))
Skip s
o' -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o' [s]
ls)
Step s a
Stop -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
_ []) = m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. HasCallStack => a
undefined
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
o (s
st:[s]
ls)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o [s]
ls)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] [s]
rs) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [] [s]
rs)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL (s
st:[s]
ls) [s]
rs) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [s]
rs)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls []) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls (s
st:[s]
rs)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [s]
ls [s]
rs)
RENAME(unfoldInterleave,unfoldEachInterleaveRev)
{-# INLINE_NORMAL unfoldEachRoundRobin #-}
unfoldEachRoundRobin, unfoldRoundRobin :: Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachRoundRobin :: forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEachRoundRobin (Unfold s -> m (Step s b)
istep a -> m s
inject) (Stream State StreamK m a -> s -> m (Step s a)
ostep s
ost) =
(State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> ConcatUnfoldInterleaveState s s -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
ost [])
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> ConcatUnfoldInterleaveState s s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
step State StreamK m a
gst (ConcatUnfoldInterleaveOuter s
o [s]
ls) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
ostep (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
o
case Step s a
r of
Yield a
a s
o' -> do
s
i <- a -> m s
inject a
a
s
i s
-> m (Step (ConcatUnfoldInterleaveState s s) b)
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. a -> b -> b
`seq` Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o' (s
i s -> [s] -> [s]
forall a. a -> [a] -> [a]
: [s]
ls)))
Skip s
o' -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInner s
o' [s]
ls)
Step s a
Stop -> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
o []) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInner s
o (s
st:[s]
ls)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip (s -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. o -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveOuter s
o [s]
ls)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL [] [s]
rs) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [] [s]
rs)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerL (s
st:[s]
ls) [s]
rs) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
rs))
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [s]
rs)
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [] []) = Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ConcatUnfoldInterleaveState s s) b
forall s a. Step s a
Stop
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls []) =
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerL [s]
ls [])
step State StreamK m a
_ (ConcatUnfoldInterleaveInnerR [s]
ls (s
st:[s]
rs)) = do
Step s b
r <- s -> m (Step s b)
istep s
st
Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b))
-> Step (ConcatUnfoldInterleaveState s s) b
-> m (Step (ConcatUnfoldInterleaveState s s) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
r of
Yield b
x s
s -> b
-> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. a -> s -> Step s a
Yield b
x ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Skip s
s -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR (s
ss -> [s] -> [s]
forall a. a -> [a] -> [a]
:[s]
ls) [s]
rs)
Step s b
Stop -> ConcatUnfoldInterleaveState s s
-> Step (ConcatUnfoldInterleaveState s s) b
forall s a. s -> Step s a
Skip ([s] -> [s] -> ConcatUnfoldInterleaveState s s
forall o i. [i] -> [i] -> ConcatUnfoldInterleaveState o i
ConcatUnfoldInterleaveInnerR [s]
ls [s]
rs)
RENAME(unfoldRoundRobin,unfoldEachRoundRobin)
{-# ANN type InterposeSuffixState Fuse #-}
data InterposeSuffixState s1 i1 =
InterposeSuffixFirst s1
| InterposeSuffixFirstInner s1 i1
| InterposeSuffixSecond s1
{-# INLINE_NORMAL unfoldEachEndByM #-}
unfoldEachEndByM, interposeSuffixM :: Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndByM :: forall (m :: * -> *) c b.
Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndByM
m c
action
(Unfold s -> m (Step s c)
istep1 b -> m s
inject1) (Stream State StreamK m b -> s -> m (Step s b)
step1 s
state1) =
(State StreamK m c
-> InterposeSuffixState s s
-> m (Step (InterposeSuffixState s s) c))
-> InterposeSuffixState s s -> Stream m c
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m c
-> InterposeSuffixState s s
-> m (Step (InterposeSuffixState s s) c)
forall {m :: * -> *} {a}.
State StreamK m a
-> InterposeSuffixState s s
-> m (Step (InterposeSuffixState s s) c)
step (s -> InterposeSuffixState s s
forall s1 i1. s1 -> InterposeSuffixState s1 i1
InterposeSuffixFirst s
state1)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterposeSuffixState s s
-> m (Step (InterposeSuffixState s s) c)
step State StreamK m a
gst (InterposeSuffixFirst s
s1) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step1 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject1 b
a
s
i s
-> m (Step (InterposeSuffixState s s) c)
-> m (Step (InterposeSuffixState s s) c)
forall a b. a -> b -> b
`seq` Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. s -> Step s a
Skip (s -> s -> InterposeSuffixState s s
forall s1 i1. s1 -> i1 -> InterposeSuffixState s1 i1
InterposeSuffixFirstInner s
s s
i))
Skip s
s -> Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c))
-> Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a b. (a -> b) -> a -> b
$ InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. s -> Step s a
Skip (s -> InterposeSuffixState s s
forall s1 i1. s1 -> InterposeSuffixState s1 i1
InterposeSuffixFirst s
s)
Step s b
Stop -> Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (InterposeSuffixState s s) c
forall s a. Step s a
Stop
step State StreamK m a
_ (InterposeSuffixFirstInner s
s1 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c))
-> Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> InterposeSuffixState s s
forall s1 i1. s1 -> i1 -> InterposeSuffixState s1 i1
InterposeSuffixFirstInner s
s1 s
i')
Skip s
i' -> InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. s -> Step s a
Skip (s -> s -> InterposeSuffixState s s
forall s1 i1. s1 -> i1 -> InterposeSuffixState s1 i1
InterposeSuffixFirstInner s
s1 s
i')
Step s c
Stop -> InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. s -> Step s a
Skip (s -> InterposeSuffixState s s
forall s1 i1. s1 -> InterposeSuffixState s1 i1
InterposeSuffixSecond s
s1)
step State StreamK m a
_ (InterposeSuffixSecond s
s1) = do
c
r <- m c
action
Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c))
-> Step (InterposeSuffixState s s) c
-> m (Step (InterposeSuffixState s s) c)
forall a b. (a -> b) -> a -> b
$ c -> InterposeSuffixState s s -> Step (InterposeSuffixState s s) c
forall s a. a -> s -> Step s a
Yield c
r (s -> InterposeSuffixState s s
forall s1 i1. s1 -> InterposeSuffixState s1 i1
InterposeSuffixFirst s
s1)
{-# INLINE unfoldEachEndBy #-}
unfoldEachEndBy, interposeSuffix :: Monad m
=> c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndBy :: forall (m :: * -> *) c b.
Monad m =>
c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndBy c
x = m c -> Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) c b.
Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndByM (c -> m c
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return c
x)
RENAME(interposeSuffix,unfoldEachEndBy)
RENAME(interposeSuffixM,unfoldEachEndByM)
{-# ANN type InterposeState Fuse #-}
data InterposeState s1 i1 a =
InterposeFirst s1
| InterposeFirstInner s1 i1
| InterposeFirstInject s1
| InterposeSecondYield s1 i1
{-# INLINE_NORMAL unfoldEachSepByM #-}
unfoldEachSepByM, interposeM :: Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepByM :: forall (m :: * -> *) c b.
Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepByM
m c
action
(Unfold s -> m (Step s c)
istep1 b -> m s
inject1) (Stream State StreamK m b -> s -> m (Step s b)
step1 s
state1) =
(State StreamK m c
-> InterposeState s s Any -> m (Step (InterposeState s s Any) c))
-> InterposeState s s Any -> Stream m c
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m c
-> InterposeState s s Any -> m (Step (InterposeState s s Any) c)
forall {m :: * -> *} {a} {a} {a}.
State StreamK m a
-> InterposeState s s a -> m (Step (InterposeState s s a) c)
step (s -> InterposeState s s Any
forall s1 i1 a. s1 -> InterposeState s1 i1 a
InterposeFirst s
state1)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> InterposeState s s a -> m (Step (InterposeState s s a) c)
step State StreamK m a
gst (InterposeFirst s
s1) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step1 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject1 b
a
s
i s
-> m (Step (InterposeState s s a) c)
-> m (Step (InterposeState s s a) c)
forall a b. a -> b -> b
`seq` Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> s -> InterposeState s s a
forall s1 i1 a. s1 -> i1 -> InterposeState s1 i1 a
InterposeFirstInner s
s s
i))
Skip s
s -> Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c))
-> Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c)
forall a b. (a -> b) -> a -> b
$ InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> InterposeState s s a
forall s1 i1 a. s1 -> InterposeState s1 i1 a
InterposeFirst s
s)
Step s b
Stop -> Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (InterposeState s s a) c
forall s a. Step s a
Stop
step State StreamK m a
_ (InterposeFirstInner s
s1 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c))
-> Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> InterposeState s s a -> Step (InterposeState s s a) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> InterposeState s s a
forall s1 i1 a. s1 -> i1 -> InterposeState s1 i1 a
InterposeFirstInner s
s1 s
i')
Skip s
i' -> InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> s -> InterposeState s s a
forall s1 i1 a. s1 -> i1 -> InterposeState s1 i1 a
InterposeFirstInner s
s1 s
i')
Step s c
Stop -> InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> InterposeState s s a
forall s1 i1 a. s1 -> InterposeState s1 i1 a
InterposeFirstInject s
s1)
step State StreamK m a
gst (InterposeFirstInject s
s1) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step1 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject1 b
a
s
i s
-> m (Step (InterposeState s s a) c)
-> m (Step (InterposeState s s a) c)
forall a b. a -> b -> b
`seq` Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> s -> InterposeState s s a
forall s1 i1 a. s1 -> i1 -> InterposeState s1 i1 a
InterposeSecondYield s
s s
i))
Skip s
s -> Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c))
-> Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c)
forall a b. (a -> b) -> a -> b
$ InterposeState s s a -> Step (InterposeState s s a) c
forall s a. s -> Step s a
Skip (s -> InterposeState s s a
forall s1 i1 a. s1 -> InterposeState s1 i1 a
InterposeFirstInject s
s)
Step s b
Stop -> Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (InterposeState s s a) c
forall s a. Step s a
Stop
step State StreamK m a
_ (InterposeSecondYield s
s1 s
i1) = do
c
r <- m c
action
Step (InterposeState s s a) c -> m (Step (InterposeState s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c))
-> Step (InterposeState s s a) c
-> m (Step (InterposeState s s a) c)
forall a b. (a -> b) -> a -> b
$ c -> InterposeState s s a -> Step (InterposeState s s a) c
forall s a. a -> s -> Step s a
Yield c
r (s -> s -> InterposeState s s a
forall s1 i1 a. s1 -> i1 -> InterposeState s1 i1 a
InterposeFirstInner s
s1 s
i1)
{-# INLINE unfoldEachSepBy #-}
unfoldEachSepBy, interpose :: Monad m
=> c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepBy :: forall (m :: * -> *) c b.
Monad m =>
c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepBy c
x = m c -> Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) c b.
Monad m =>
m c -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepByM (c -> m c
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return c
x)
RENAME(interposeM,unfoldEachSepByM)
RENAME(interpose,unfoldEachSepBy)
data ICUState s1 s2 i1 i2 =
ICUFirst s1 s2
| ICUSecond s1 s2
| ICUSecondOnly s2
| ICUFirstOnly s1
| ICUFirstInner s1 s2 i1
| ICUSecondInner s1 s2 i2
| ICUFirstOnlyInner s1 i1
| ICUSecondOnlyInner s2 i2
{-# INLINE_NORMAL intercalateEndBy #-}
intercalateEndBy :: Monad m =>
Unfold m a c -> Stream m a
-> Unfold m b c -> Stream m b
-> Stream m c
intercalateEndBy :: forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
intercalateEndBy
(Unfold s -> m (Step s c)
istep2 a -> m s
inject2) (Stream State StreamK m a -> s -> m (Step s a)
step2 s
state2)
(Unfold s -> m (Step s c)
istep1 b -> m s
inject1) (Stream State StreamK m b -> s -> m (Step s b)
step1 s
state1) =
(State StreamK m c
-> ICUState s s s s -> m (Step (ICUState s s s s) c))
-> ICUState s s s s -> Stream m c
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m c
-> ICUState s s s s -> m (Step (ICUState s s s s) c)
forall {m :: * -> *} {a}.
State StreamK m a
-> ICUState s s s s -> m (Step (ICUState s s s s) c)
step (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> ICUState s1 s2 i1 i2
ICUFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> ICUState s s s s -> m (Step (ICUState s s s s) c)
step State StreamK m a
gst (ICUFirst s
s1 s
s2) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step1 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject1 b
a
s
i s -> m (Step (ICUState s s s s) c) -> m (Step (ICUState s s s s) c)
forall a b. a -> b -> b
`seq` Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstInner s
s s
s2 s
i))
Skip s
s -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> ICUState s1 s2 i1 i2
ICUFirst s
s s
s2)
Step s b
Stop -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ICUState s s s s) c
forall s a. Step s a
Stop
step State StreamK m a
gst (ICUFirstOnly s
s1) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step1 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject1 b
a
s
i s -> m (Step (ICUState s s s s) c) -> m (Step (ICUState s s s s) c)
forall a b. a -> b -> b
`seq` Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstOnlyInner s
s s
i))
Skip s
s -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> ICUState s1 s2 i1 i2
ICUFirstOnly s
s)
Step s b
Stop -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ICUState s s s s) c
forall s a. Step s a
Stop
step State StreamK m a
_ (ICUFirstInner s
s1 s
s2 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstInner s
s1 s
s2 s
i')
Skip s
i' -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstInner s
s1 s
s2 s
i')
Step s c
Stop -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> ICUState s1 s2 i1 i2
ICUSecond s
s1 s
s2)
step State StreamK m a
_ (ICUFirstOnlyInner s
s1 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstOnlyInner s
s1 s
i')
Skip s
i' -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> i1 -> ICUState s1 s2 i1 i2
ICUFirstOnlyInner s
s1 s
i')
Step s c
Stop -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> ICUState s1 s2 i1 i2
ICUFirstOnly s
s1)
step State StreamK m a
gst (ICUSecond s
s1 s
s2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step2 (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s2
case Step s a
r of
Yield a
a s
s -> do
s
i <- a -> m s
inject2 a
a
s
i s -> m (Step (ICUState s s s s) c) -> m (Step (ICUState s s s s) c)
forall a b. a -> b -> b
`seq` Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i2 -> ICUState s1 s2 i1 i2
ICUSecondInner s
s1 s
s s
i))
Skip s
s -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> ICUState s1 s2 i1 i2
ICUSecond s
s1 s
s)
Step s a
Stop -> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> ICUState s1 s2 i1 i2
ICUFirstOnly s
s1)
step State StreamK m a
_ (ICUSecondInner s
s1 s
s2 s
i2) = do
Step s c
r <- s -> m (Step s c)
istep2 s
i2
Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c))
-> Step (ICUState s s s s) c -> m (Step (ICUState s s s s) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i2 -> ICUState s1 s2 i1 i2
ICUSecondInner s
s1 s
s2 s
i')
Skip s
i' -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> i2 -> ICUState s1 s2 i1 i2
ICUSecondInner s
s1 s
s2 s
i')
Step s c
Stop -> ICUState s s s s -> Step (ICUState s s s s) c
forall s a. s -> Step s a
Skip (s -> s -> ICUState s s s s
forall s1 s2 i1 i2. s1 -> s2 -> ICUState s1 s2 i1 i2
ICUFirst s
s1 s
s2)
step State StreamK m a
_ (ICUSecondOnly s
_s2) = m (Step (ICUState s s s s) c)
forall a. HasCallStack => a
undefined
step State StreamK m a
_ (ICUSecondOnlyInner s
_s2 s
_i2) = m (Step (ICUState s s s s) c)
forall a. HasCallStack => a
undefined
{-# DEPRECATED gintercalateSuffix "Please use intercalateEndBy instead. Note the change in argument order." #-}
{-# INLINE gintercalateSuffix #-}
gintercalateSuffix
:: Monad m
=> Unfold m a c -> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
gintercalateSuffix :: forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
gintercalateSuffix Unfold m a c
u1 Stream m a
s1 Unfold m b c
u2 Stream m b
s2 = Unfold m b c
-> Stream m b -> Unfold m a c -> Stream m a -> Stream m c
forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
intercalateEndBy Unfold m b c
u2 Stream m b
s2 Unfold m a c
u1 Stream m a
s1
data ICALState s1 s2 i1 i2 a =
ICALFirst s1 s2
| ICALFirstInner s1 s2 i1
| ICALFirstOnly s1
| ICALFirstOnlyInner s1 i1
| ICALSecondInject s1 s2
| ICALFirstInject s1 s2 i2
| ICALSecondInner s1 s2 i1 i2
{-# INLINE_NORMAL intercalateSepBy #-}
intercalateSepBy
:: Monad m
=> Unfold m b c -> Stream m b
-> Unfold m a c -> Stream m a
-> Stream m c
intercalateSepBy :: forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
intercalateSepBy
(Unfold s -> m (Step s c)
istep2 b -> m s
inject2) (Stream State StreamK m b -> s -> m (Step s b)
step2 s
state2)
(Unfold s -> m (Step s c)
istep1 a -> m s
inject1) (Stream State StreamK m a -> s -> m (Step s a)
step1 s
state1) =
(State StreamK m c
-> ICALState s s s s Any -> m (Step (ICALState s s s s Any) c))
-> ICALState s s s s Any -> Stream m c
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m c
-> ICALState s s s s Any -> m (Step (ICALState s s s s Any) c)
forall {m :: * -> *} {a} {a} {a}.
State StreamK m a
-> ICALState s s s s a -> m (Step (ICALState s s s s a) c)
step (s -> s -> ICALState s s s s Any
forall s1 s2 i1 i2 a. s1 -> s2 -> ICALState s1 s2 i1 i2 a
ICALFirst s
state1 s
state2)
where
{-# INLINE_LATE step #-}
step :: State StreamK m a
-> ICALState s s s s a -> m (Step (ICALState s s s s a) c)
step State StreamK m a
gst (ICALFirst s
s1 s
s2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s a
r of
Yield a
a s
s -> do
s
i <- a -> m s
inject1 a
a
s
i s
-> m (Step (ICALState s s s s a) c)
-> m (Step (ICALState s s s s a) c)
forall a b. a -> b -> b
`seq` Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstInner s
s s
s2 s
i))
Skip s
s -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> ICALState s1 s2 i1 i2 a
ICALFirst s
s s
s2)
Step s a
Stop -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ICALState s s s s a) c
forall s a. Step s a
Stop
step State StreamK m a
_ (ICALFirstInner s
s1 s
s2 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstInner s
s1 s
s2 s
i')
Skip s
i' -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstInner s
s1 s
s2 s
i')
Step s c
Stop -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> ICALState s1 s2 i1 i2 a
ICALSecondInject s
s1 s
s2)
step State StreamK m a
gst (ICALFirstOnly s
s1) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s a
r of
Yield a
a s
s -> do
s
i <- a -> m s
inject1 a
a
s
i s
-> m (Step (ICALState s s s s a) c)
-> m (Step (ICALState s s s s a) c)
forall a b. a -> b -> b
`seq` Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnlyInner s
s s
i))
Skip s
s -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnly s
s)
Step s a
Stop -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ICALState s s s s a) c
forall s a. Step s a
Stop
step State StreamK m a
_ (ICALFirstOnlyInner s
s1 s
i1) = do
Step s c
r <- s -> m (Step s c)
istep1 s
i1
Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnlyInner s
s1 s
i')
Skip s
i' -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnlyInner s
s1 s
i')
Step s c
Stop -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnly s
s1)
step State StreamK m a
gst (ICALSecondInject s
s1 s
s2) = do
Step s b
r <- State StreamK m b -> s -> m (Step s b)
step2 (State StreamK m a -> State StreamK m b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s2
case Step s b
r of
Yield b
a s
s -> do
s
i <- b -> m s
inject2 b
a
s
i s
-> m (Step (ICALState s s s s a) c)
-> m (Step (ICALState s s s s a) c)
forall a b. a -> b -> b
`seq` Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i2 -> ICALState s1 s2 i1 i2 a
ICALFirstInject s
s1 s
s s
i))
Skip s
s -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> ICALState s1 s2 i1 i2 a
ICALSecondInject s
s1 s
s)
Step s b
Stop -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> ICALState s1 s2 i1 i2 a
ICALFirstOnly s
s1)
step State StreamK m a
gst (ICALFirstInject s
s1 s
s2 s
i2) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step1 (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
s1
case Step s a
r of
Yield a
a s
s -> do
s
i <- a -> m s
inject1 a
a
s
i s
-> m (Step (ICALState s s s s a) c)
-> m (Step (ICALState s s s s a) c)
forall a b. a -> b -> b
`seq` Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a.
s1 -> s2 -> i1 -> i2 -> ICALState s1 s2 i1 i2 a
ICALSecondInner s
s s
s2 s
i s
i2))
Skip s
s -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i2 -> ICALState s1 s2 i1 i2 a
ICALFirstInject s
s s
s2 s
i2)
Step s a
Stop -> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (ICALState s s s s a) c
forall s a. Step s a
Stop
step State StreamK m a
_ (ICALSecondInner s
s1 s
s2 s
i1 s
i2) = do
Step s c
r <- s -> m (Step s c)
istep2 s
i2
Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c))
-> Step (ICALState s s s s a) c -> m (Step (ICALState s s s s a) c)
forall a b. (a -> b) -> a -> b
$ case Step s c
r of
Yield c
x s
i' -> c -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. a -> s -> Step s a
Yield c
x (s -> s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a.
s1 -> s2 -> i1 -> i2 -> ICALState s1 s2 i1 i2 a
ICALSecondInner s
s1 s
s2 s
i1 s
i')
Skip s
i' -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a.
s1 -> s2 -> i1 -> i2 -> ICALState s1 s2 i1 i2 a
ICALSecondInner s
s1 s
s2 s
i1 s
i')
Step s c
Stop -> ICALState s s s s a -> Step (ICALState s s s s a) c
forall s a. s -> Step s a
Skip (s -> s -> s -> ICALState s s s s a
forall s1 s2 i1 i2 a. s1 -> s2 -> i1 -> ICALState s1 s2 i1 i2 a
ICALFirstInner s
s1 s
s2 s
i1)
{-# DEPRECATED gintercalate "Please use intercalateSepBy instead." #-}
{-# INLINE gintercalate #-}
gintercalate :: Monad m =>
Unfold m a c -> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
gintercalate :: forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
gintercalate Unfold m a c
u1 Stream m a
s1 Unfold m b c
u2 Stream m b
s2 = Unfold m b c
-> Stream m b -> Unfold m a c -> Stream m a -> Stream m c
forall (m :: * -> *) a c b.
Monad m =>
Unfold m a c
-> Stream m a -> Unfold m b c -> Stream m b -> Stream m c
intercalateSepBy Unfold m b c
u2 Stream m b
s2 Unfold m a c
u1 Stream m a
s1
{-# INLINE unfoldEachEndBySeq #-}
unfoldEachEndBySeq :: Monad m
=> b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndBySeq :: forall (m :: * -> *) b c.
Monad m =>
b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndBySeq b
seed Unfold m b c
unf = Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEach Unfold m b c
unf (Stream m b -> Stream m c)
-> (Stream m b -> Stream m b) -> Stream m b -> Stream m c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. m b -> Stream m b -> Stream m b
forall (m :: * -> *) a. Monad m => m a -> Stream m a -> Stream m a
intersperseEndByM (b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return b
seed)
{-# DEPRECATED intercalateSuffix "Please use unfoldEachEndBySeq instead." #-}
{-# INLINE intercalateSuffix #-}
intercalateSuffix :: Monad m
=> Unfold m b c -> b -> Stream m b -> Stream m c
intercalateSuffix :: forall (m :: * -> *) b c.
Monad m =>
Unfold m b c -> b -> Stream m b -> Stream m c
intercalateSuffix Unfold m b c
u b
x = b -> Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) b c.
Monad m =>
b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachEndBySeq b
x Unfold m b c
u
{-# INLINE unfoldEachSepBySeq #-}
unfoldEachSepBySeq :: Monad m
=> b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepBySeq :: forall (m :: * -> *) b c.
Monad m =>
b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepBySeq b
seed Unfold m b c
unf Stream m b
str = Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) a b.
Monad m =>
Unfold m a b -> Stream m a -> Stream m b
unfoldEach Unfold m b c
unf (Stream m b -> Stream m c) -> Stream m b -> Stream m c
forall a b. (a -> b) -> a -> b
$ b -> Stream m b -> Stream m b
forall (m :: * -> *) a. Monad m => a -> Stream m a -> Stream m a
intersperse b
seed Stream m b
str
{-# DEPRECATED intercalate "Please use unfoldEachSepBySeq instead." #-}
{-# INLINE intercalate #-}
intercalate :: Monad m
=> Unfold m b c -> b -> Stream m b -> Stream m c
intercalate :: forall (m :: * -> *) b c.
Monad m =>
Unfold m b c -> b -> Stream m b -> Stream m c
intercalate Unfold m b c
u b
x = b -> Unfold m b c -> Stream m b -> Stream m c
forall (m :: * -> *) b c.
Monad m =>
b -> Unfold m b c -> Stream m b -> Stream m c
unfoldEachSepBySeq b
x Unfold m b c
u
{-# INLINE foldSequence #-}
foldSequence
::
Stream m (Fold m a b)
-> Stream m a
-> Stream m b
foldSequence :: forall (m :: * -> *) a b.
Stream m (Fold m a b) -> Stream m a -> Stream m b
foldSequence Stream m (Fold m a b)
_f Stream m a
_m = Stream m b
forall a. HasCallStack => a
undefined
{-# ANN type FIterState Fuse #-}
data FIterState s f m a b
= FIterInit s f
| forall fs. FIterStream s (fs -> a -> m (FL.Step fs b)) fs (fs -> m b)
(fs -> m b)
| FIterYield b (FIterState s f m a b)
| FIterStop
{-# INLINE_NORMAL foldIterateM #-}
foldIterateM ::
Monad m => (b -> m (FL.Fold m a b)) -> m b -> Stream m a -> Stream m b
foldIterateM :: forall (m :: * -> *) b a.
Monad m =>
(b -> m (Fold m a b)) -> m b -> Stream m a -> Stream m b
foldIterateM b -> m (Fold m a b)
func m b
seed0 (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> FIterState s (m b) m a b
-> m (Step (FIterState s (m b) m a b) b))
-> FIterState s (m b) m a b -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> FIterState s (m b) m a b
-> m (Step (FIterState s (m b) m a b) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> FIterState s (m b) m a b
-> m (Step (FIterState s (m b) m a b) b)
stepOuter (s -> m b -> FIterState s (m b) m a b
forall s f (m :: * -> *) a b. s -> f -> FIterState s f m a b
FIterInit s
state m b
seed0)
where
{-# INLINE iterStep #-}
iterStep :: m (Step fs a)
-> s
-> (fs -> a -> m (Step fs a))
-> (fs -> m a)
-> (fs -> m a)
-> m (Step (FIterState s (m a) m a a) a)
iterStep m (Step fs a)
from s
st fs -> a -> m (Step fs a)
fstep fs -> m a
extract fs -> m a
final = do
Step fs a
res <- m (Step fs a)
from
Step (FIterState s (m a) m a a) a
-> m (Step (FIterState s (m a) m a a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (FIterState s (m a) m a a) a
-> m (Step (FIterState s (m a) m a a) a))
-> Step (FIterState s (m a) m a a) a
-> m (Step (FIterState s (m a) m a a) a)
forall a b. (a -> b) -> a -> b
$ FIterState s (m a) m a a -> Step (FIterState s (m a) m a a) a
forall s a. s -> Step s a
Skip
(FIterState s (m a) m a a -> Step (FIterState s (m a) m a a) a)
-> FIterState s (m a) m a a -> Step (FIterState s (m a) m a a) a
forall a b. (a -> b) -> a -> b
$ case Step fs a
res of
FL.Partial fs
fs -> s
-> (fs -> a -> m (Step fs a))
-> fs
-> (fs -> m a)
-> (fs -> m a)
-> FIterState s (m a) m a a
forall s f (m :: * -> *) a b fs.
s
-> (fs -> a -> m (Step fs b))
-> fs
-> (fs -> m b)
-> (fs -> m b)
-> FIterState s f m a b
FIterStream s
st fs -> a -> m (Step fs a)
fstep fs
fs fs -> m a
extract fs -> m a
final
FL.Done a
fb -> a -> FIterState s (m a) m a a -> FIterState s (m a) m a a
forall s f (m :: * -> *) a b.
b -> FIterState s f m a b -> FIterState s f m a b
FIterYield a
fb (FIterState s (m a) m a a -> FIterState s (m a) m a a)
-> FIterState s (m a) m a a -> FIterState s (m a) m a a
forall a b. (a -> b) -> a -> b
$ s -> m a -> FIterState s (m a) m a a
forall s f (m :: * -> *) a b. s -> f -> FIterState s f m a b
FIterInit s
st (a -> m a
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return a
fb)
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> FIterState s (m b) m a b
-> m (Step (FIterState s (m b) m a b) b)
stepOuter State StreamK m a
_ (FIterInit s
st m b
seed) = do
(FL.Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
extract s -> m b
final) <- m b
seed m b -> (b -> m (Fold m a b)) -> m (Fold m a b)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= b -> m (Fold m a b)
func
m (Step s b)
-> s
-> (s -> a -> m (Step s b))
-> (s -> m b)
-> (s -> m b)
-> m (Step (FIterState s (m b) m a b) b)
forall {m :: * -> *} {m :: * -> *} {fs} {a} {s} {a} {m :: * -> *}
{a}.
(Monad m, Monad m) =>
m (Step fs a)
-> s
-> (fs -> a -> m (Step fs a))
-> (fs -> m a)
-> (fs -> m a)
-> m (Step (FIterState s (m a) m a a) a)
iterStep m (Step s b)
initial s
st s -> a -> m (Step s b)
fstep s -> m b
extract s -> m b
final
stepOuter State StreamK m a
gst (FIterStream s
st fs -> a -> m (Step fs b)
fstep fs
fs fs -> m b
extract fs -> m b
final) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
r of
Yield a
x s
s -> do
m (Step fs b)
-> s
-> (fs -> a -> m (Step fs b))
-> (fs -> m b)
-> (fs -> m b)
-> m (Step (FIterState s (m b) m a b) b)
forall {m :: * -> *} {m :: * -> *} {fs} {a} {s} {a} {m :: * -> *}
{a}.
(Monad m, Monad m) =>
m (Step fs a)
-> s
-> (fs -> a -> m (Step fs a))
-> (fs -> m a)
-> (fs -> m a)
-> m (Step (FIterState s (m a) m a a) a)
iterStep (fs -> a -> m (Step fs b)
fstep fs
fs a
x) s
s fs -> a -> m (Step fs b)
fstep fs -> m b
extract fs -> m b
final
Skip s
s -> Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b))
-> Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a b. (a -> b) -> a -> b
$ FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b
forall s a. s -> Step s a
Skip (FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b)
-> FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b
forall a b. (a -> b) -> a -> b
$ s
-> (fs -> a -> m (Step fs b))
-> fs
-> (fs -> m b)
-> (fs -> m b)
-> FIterState s (m b) m a b
forall s f (m :: * -> *) a b fs.
s
-> (fs -> a -> m (Step fs b))
-> fs
-> (fs -> m b)
-> (fs -> m b)
-> FIterState s f m a b
FIterStream s
s fs -> a -> m (Step fs b)
fstep fs
fs fs -> m b
extract fs -> m b
final
Step s a
Stop -> do
b
b <- fs -> m b
final fs
fs
Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b))
-> Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a b. (a -> b) -> a -> b
$ FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b
forall s a. s -> Step s a
Skip (FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b)
-> FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b
forall a b. (a -> b) -> a -> b
$ b -> FIterState s (m b) m a b -> FIterState s (m b) m a b
forall s f (m :: * -> *) a b.
b -> FIterState s f m a b -> FIterState s f m a b
FIterYield b
b FIterState s (m b) m a b
forall s f (m :: * -> *) a b. FIterState s f m a b
FIterStop
stepOuter State StreamK m a
_ (FIterYield b
a FIterState s (m b) m a b
next) = Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b))
-> Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a b. (a -> b) -> a -> b
$ b -> FIterState s (m b) m a b -> Step (FIterState s (m b) m a b) b
forall s a. a -> s -> Step s a
Yield b
a FIterState s (m b) m a b
next
stepOuter State StreamK m a
_ FIterState s (m b) m a b
FIterStop = Step (FIterState s (m b) m a b) b
-> m (Step (FIterState s (m b) m a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (FIterState s (m b) m a b) b
forall s a. Step s a
Stop
{-# ANN type ParseChunksState Fuse #-}
data ParseChunksState x inpBuf st pst =
ParseChunksInit inpBuf st
| ParseChunksInitBuf inpBuf
| ParseChunksInitLeftOver inpBuf
| ParseChunksStream st inpBuf !pst
| ParseChunksStop inpBuf !pst
| ParseChunksBuf inpBuf st inpBuf !pst
| inpBuf inpBuf !pst
| ParseChunksYield x (ParseChunksState x inpBuf st pst)
{-# INLINE_NORMAL parseMany #-}
parseMany
:: Monad m
=> PRD.Parser a m b
-> Stream m a
-> Stream m (Either ParseError b)
parseMany :: forall (m :: * -> *) a b.
Monad m =>
Parser a m b -> Stream m a -> Stream m (Either ParseError b)
parseMany (PRD.Parser s -> a -> m (Step s b)
pstep m (Initial s b)
initial s -> m (Step s b)
extract) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m (Either ParseError b)
-> ParseChunksState (Either ParseError b) [a] s s
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> ParseChunksState (Either ParseError b) [a] s s
-> Stream m (Either ParseError b)
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m (Either ParseError b)
-> ParseChunksState (Either ParseError b) [a] s s
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall {m :: * -> *} {a}.
State StreamK m a
-> ParseChunksState (Either ParseError b) [a] s s
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
stepOuter ([a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [] s
state)
where
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> ParseChunksState (Either ParseError b) [a] s s
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
stepOuter State StreamK m a
gst (ParseChunksInit [] s
st) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
r of
Yield a
x s
s -> do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a
x] s
s [] s
ps
PRD.IDone b
pb ->
let next :: ParseChunksState x [a] s pst
next = [a] -> s -> ParseChunksState x [a] s pst
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [a
x] s
s
in Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ParseChunksState (Either ParseError b) [a] s s
forall {x} {pst}. ParseChunksState x [a] s pst
next
PRD.IError String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
Skip s
s -> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [] s
s
Step s a
Stop -> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ (ParseChunksInit [a]
src s
st) = do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
src s
st [] s
ps
PRD.IDone b
pb ->
let next :: ParseChunksState x [a] s pst
next = [a] -> s -> ParseChunksState x [a] s pst
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [a]
src s
st
in Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ParseChunksState (Either ParseError b) [a] s s
forall {x} {pst}. ParseChunksState x [a] s pst
next
PRD.IError String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
stepOuter State StreamK m a
_ (ParseChunksInitBuf [a]
src) = do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
src [] s
ps
PRD.IDone b
pb ->
let next :: ParseChunksState x [a] st pst
next = [a] -> ParseChunksState x [a] st pst
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitBuf [a]
src
in Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ParseChunksState (Either ParseError b) [a] s s
forall {x} {st} {pst}. ParseChunksState x [a] st pst
next
PRD.IError String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
stepOuter State StreamK m a
_ (ParseChunksInitLeftOver [a]
_) = Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (ParseChunksStream s
st [a]
buf s
pst) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
r of
Yield a
x s
s -> do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStream s
s [] s
pst1
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
src s
s [] s
pst1
PR.Continue Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStream s
s (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf) s
pst1
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
src s
s [a]
buf1 s
pst1
PR.Done Int
0 b
b -> do
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [] s
s)
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf))
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [a]
src s
s)
PR.Error String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
Skip s
s -> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStream s
s [a]
buf s
pst
Step s a
Stop -> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStop [a]
buf s
pst
stepOuter State StreamK m a
_ (ParseChunksBuf [] s
s [a]
buf s
pst) =
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStream s
s [a]
buf s
pst
stepOuter State StreamK m a
_ (ParseChunksBuf (a
x:[a]
xs) s
s [a]
buf s
pst) = do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
xs s
s [] s
pst1
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
src s
s [] s
pst1
PR.Continue Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
xs s
s (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf) s
pst1
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksBuf [a]
src s
s [a]
buf1 s
pst1
PR.Done Int
0 b
b ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [a]
xs s
s)
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> st -> ParseChunksState x inpBuf st pst
ParseChunksInit [a]
src s
s)
PR.Error String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
stepOuter State StreamK m a
_ (ParseChunksExtract [] [a]
buf s
pst) =
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStop [a]
buf s
pst
stepOuter State StreamK m a
_ (ParseChunksExtract (a
x:[a]
xs) [a]
buf s
pst) = do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
xs [] s
pst1
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
src [] s
pst1
PR.Continue Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
xs (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf) s
pst1
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
src [a]
buf1 s
pst1
PR.Done Int
0 b
b ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitBuf [a]
xs)
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitBuf [a]
src)
PR.Error String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
stepOuter State StreamK m a
_ (ParseChunksStop [a]
buf s
pst) = do
Step s b
pRes <- s -> m (Step s b)
extract s
pst
case Step s b
pRes of
PR.Partial Int
_ s
_ -> String
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. HasCallStack => String -> a
error String
"Bug: parseMany: Partial in extract"
PR.Continue Int
0 s
pst1 ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksStop [a]
buf s
pst1
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
buf) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n [a]
buf
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a] -> [a] -> s -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
inpBuf -> inpBuf -> pst -> ParseChunksState x inpBuf st pst
ParseChunksExtract [a]
src [a]
buf1 s
pst1
PR.Done Int
0 b
b -> do
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
buf) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n [a]
buf)
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitBuf [a]
src)
PR.Error String
err ->
Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst.
x
-> ParseChunksState x inpBuf st pst
-> ParseChunksState x inpBuf st pst
ParseChunksYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a] -> ParseChunksState (Either ParseError b) [a] s s
forall x inpBuf st pst. inpBuf -> ParseChunksState x inpBuf st pst
ParseChunksInitLeftOver [])
stepOuter State StreamK m a
_ (ParseChunksYield Either ParseError b
a ParseChunksState (Either ParseError b) [a] s s
next) = Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)))
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
-> m (Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ParseChunksState (Either ParseError b) [a] s s
-> Step
(ParseChunksState (Either ParseError b) [a] s s)
(Either ParseError b)
forall s a. a -> s -> Step s a
Yield Either ParseError b
a ParseChunksState (Either ParseError b) [a] s s
next
{-# DEPRECATED parseManyD "Please use parseMany instead." #-}
{-# INLINE parseManyD #-}
parseManyD
:: Monad m
=> PR.Parser a m b
-> Stream m a
-> Stream m (Either ParseError b)
parseManyD :: forall (m :: * -> *) a b.
Monad m =>
Parser a m b -> Stream m a -> Stream m (Either ParseError b)
parseManyD = Parser a m b -> Stream m a -> Stream m (Either ParseError b)
forall (m :: * -> *) a b.
Monad m =>
Parser a m b -> Stream m a -> Stream m (Either ParseError b)
parseMany
{-# INLINE parseSequence #-}
parseSequence
::
Stream m (PR.Parser a m b)
-> Stream m a
-> Stream m b
parseSequence :: forall (m :: * -> *) a b.
Stream m (Parser a m b) -> Stream m a -> Stream m b
parseSequence Stream m (Parser a m b)
_f Stream m a
_m = Stream m b
forall a. HasCallStack => a
undefined
{-# INLINE parseManyTill #-}
parseManyTill ::
PR.Parser a m b
-> PR.Parser a m x
-> Stream m a
-> Stream m b
parseManyTill :: forall a (m :: * -> *) b x.
Parser a m b -> Parser a m x -> Stream m a -> Stream m b
parseManyTill = Parser a m b -> Parser a m x -> Stream m a -> Stream m b
forall a. HasCallStack => a
undefined
{-# ANN type ConcatParseState Fuse #-}
data ConcatParseState c b inpBuf st p m a =
ConcatParseInit inpBuf st p
| ConcatParseInitBuf inpBuf p
| ConcatParseInitLeftOver inpBuf
| forall s. ConcatParseStop
inpBuf (s -> a -> m (PRD.Step s b)) s (s -> m (PRD.Step s b))
| forall s. ConcatParseStream
st inpBuf (s -> a -> m (PRD.Step s b)) s (s -> m (PRD.Step s b))
| forall s. ConcatParseBuf
inpBuf st inpBuf (s -> a -> m (PRD.Step s b)) s (s -> m (PRD.Step s b))
| forall s.
inpBuf inpBuf (s -> a -> m (PRD.Step s b)) s (s -> m (PRD.Step s b))
| ConcatParseYield c (ConcatParseState c b inpBuf st p m a)
{-# INLINE_NORMAL parseIterate #-}
parseIterate
:: Monad m
=> (b -> PRD.Parser a m b)
-> b
-> Stream m a
-> Stream m (Either ParseError b)
parseIterate :: forall (m :: * -> *) b a.
Monad m =>
(b -> Parser a m b)
-> b -> Stream m a -> Stream m (Either ParseError b)
parseIterate b -> Parser a m b
func b
seed (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m (Either ParseError b)
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Stream m (Either ParseError b)
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m (Either ParseError b)
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall {m :: * -> *} {a}.
State StreamK m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
stepOuter ([a]
-> s
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> st -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInit [] s
state (b -> Parser a m b
func b
seed))
where
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
stepOuter State StreamK m a
_ (ConcatParseInit [] s
st (PRD.Parser s -> a -> m (Step s b)
pstep m (Initial s b)
initial s -> m (Step s b)
extract)) = do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStream s
st [] s -> a -> m (Step s b)
pstep s
ps s -> m (Step s b)
extract
PRD.IDone b
pb ->
let next :: ConcatParseState c b [a] s (Parser a m b) m a
next = [a]
-> s
-> Parser a m b
-> ConcatParseState c b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> st -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInit [] s
st (b -> Parser a m b
func b
pb)
in Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
forall {c} {b} {a} {m :: * -> *} {a}.
ConcatParseState c b [a] s (Parser a m b) m a
next
PRD.IError String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseInit [a]
src s
st
(PRD.Parser s -> a -> m (Step s b)
pstep m (Initial s b)
initial s -> m (Step s b)
extract)) = do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
src s
st [] s -> a -> m (Step s b)
pstep s
ps s -> m (Step s b)
extract
PRD.IDone b
pb ->
let next :: ConcatParseState c b [a] s (Parser a m b) m a
next = [a]
-> s
-> Parser a m b
-> ConcatParseState c b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> st -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInit [a]
src s
st (b -> Parser a m b
func b
pb)
in Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
forall {c} {b} {m :: * -> *} {a}.
ConcatParseState c b [a] s (Parser a m b) m a
next
PRD.IError String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseInitBuf [a]
src
(PRD.Parser s -> a -> m (Step s b)
pstep m (Initial s b)
initial s -> m (Step s b)
extract)) = do
Initial s b
res <- m (Initial s b)
initial
case Initial s b
res of
PRD.IPartial s
ps ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
src [] s -> a -> m (Step s b)
pstep s
ps s -> m (Step s b)
extract
PRD.IDone b
pb ->
let next :: ConcatParseState c b [a] st (Parser a m b) m a
next = [a]
-> Parser a m b -> ConcatParseState c b [a] st (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInitBuf [a]
src (b -> Parser a m b
func b
pb)
in Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
pb) ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
forall {c} {b} {st} {m :: * -> *} {a}.
ConcatParseState c b [a] st (Parser a m b) m a
next
PRD.IError String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseInitLeftOver [a]
_) = Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (ConcatParseStream s
st [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract) = do
Step s a
r <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
r of
Yield a
x s
s -> do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStream s
s [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
src s
s [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
src s
s [a]
buf1 s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf))
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a]
-> s
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> st -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInit [a]
src s
s (b -> Parser a m b
func b
b))
PR.Error String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
Skip s
s -> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStream s
s [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract
Step s a
Stop -> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStop [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract
stepOuter State StreamK m a
_ (ConcatParseBuf [] s
s [a]
buf s -> a -> m (Step s b)
pstep s
ps s -> m (Step s b)
extract) =
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStream s
s [a]
buf s -> a -> m (Step s b)
pstep s
ps s -> m (Step s b)
extract
stepOuter State StreamK m a
_ (ConcatParseBuf (a
x:[a]
xs) s
s [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract) = do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
xs s
s [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
src s
s [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> s
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> st
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseBuf [a]
src s
s [a]
buf1 s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b)
([a]
-> s
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> st -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInit [a]
src s
s (b -> Parser a m b
func b
b))
PR.Error String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseExtract [] [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract) =
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStop [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract
stepOuter State StreamK m a
_ (ConcatParseExtract (a
x:[a]
xs) [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract) = do
Step s b
pRes <- s -> a -> m (Step s b)
pstep s
pst a
x
case Step s b
pRes of
PR.Partial Int
0 s
pst1 ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
xs [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Partial Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src0 :: [a]
src0 = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
src [] s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Continue Int
0 s
pst1 ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
xs (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf) s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0 [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
src [a]
buf1 s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Done Int
0 b
b ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a]
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInitBuf [a]
xs (b -> Parser a m b
func b
b))
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n (a
xa -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
buf)) [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
xs
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a]
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInitBuf [a]
src (b -> Parser a m b
func b
b))
PR.Error String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseStop [a]
buf s -> a -> m (Step s b)
pstep s
pst s -> m (Step s b)
extract) = do
Step s b
pRes <- s -> m (Step s b)
extract s
pst
case Step s b
pRes of
PR.Partial Int
_ s
_ -> String
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. HasCallStack => String -> a
error String
"Bug: parseIterate: Partial in extract"
PR.Continue Int
0 s
pst1 ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseStop [a]
buf s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Continue Int
n s
pst1 -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
buf) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let ([a]
src0, [a]
buf1) = Int -> [a] -> ([a], [a])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
n [a]
buf
src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse [a]
src0
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ [a]
-> [a]
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a s.
inpBuf
-> inpBuf
-> (s -> a -> m (Step s b))
-> s
-> (s -> m (Step s b))
-> ConcatParseState c b inpBuf st p m a
ConcatParseExtract [a]
src [a]
buf1 s -> a -> m (Step s b)
pstep s
pst1 s -> m (Step s b)
extract
PR.Done Int
0 b
b -> do
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
PR.Done Int
n b
b -> do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= [a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
buf) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
let src :: [a]
src = [a] -> [a]
forall a. [a] -> [a]
Prelude.reverse (Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
Prelude.take Int
n [a]
buf)
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip (ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$
Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield (b -> Either ParseError b
forall a b. b -> Either a b
Right b
b) ([a]
-> Parser a m b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> p -> ConcatParseState c b inpBuf st p m a
ConcatParseInitBuf [a]
src (b -> Parser a m b
func b
b))
PR.Error String
err ->
Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. s -> Step s a
Skip
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
c
-> ConcatParseState c b inpBuf st p m a
-> ConcatParseState c b inpBuf st p m a
ConcatParseYield
(ParseError -> Either ParseError b
forall a b. a -> Either a b
Left (String -> ParseError
ParseError String
err))
([a]
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
forall c b inpBuf st p (m :: * -> *) a.
inpBuf -> ConcatParseState c b inpBuf st p m a
ConcatParseInitLeftOver [])
stepOuter State StreamK m a
_ (ConcatParseYield Either ParseError b
a ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
next) = Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)))
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
-> m (Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b))
forall a b. (a -> b) -> a -> b
$ Either ParseError b
-> ConcatParseState
(Either ParseError b) b [a] s (Parser a m b) m a
-> Step
(ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a)
(Either ParseError b)
forall s a. a -> s -> Step s a
Yield Either ParseError b
a ConcatParseState (Either ParseError b) b [a] s (Parser a m b) m a
next
{-# DEPRECATED parseIterateD "Please use parseIterate instead." #-}
{-# INLINE parseIterateD #-}
parseIterateD
:: Monad m
=> (b -> PR.Parser a m b)
-> b
-> Stream m a
-> Stream m (Either ParseError b)
parseIterateD :: forall (m :: * -> *) b a.
Monad m =>
(b -> Parser a m b)
-> b -> Stream m a -> Stream m (Either ParseError b)
parseIterateD = (b -> Parser a m b)
-> b -> Stream m a -> Stream m (Either ParseError b)
forall (m :: * -> *) b a.
Monad m =>
(b -> Parser a m b)
-> b -> Stream m a -> Stream m (Either ParseError b)
parseIterate
data GroupByState st fs a b
= GroupingInit st
| GroupingDo st !fs
| GroupingInitWith st !a
| GroupingDoWith st !fs !a
| GroupingYield !b (GroupByState st fs a b)
| GroupingDone
{-# INLINE_NORMAL groupsWhile #-}
groupsWhile :: Monad m
=> (a -> a -> Bool)
-> Fold m a b
-> Stream m a
-> Stream m b
groupsWhile :: forall (m :: * -> *) a b.
Monad m =>
(a -> a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
groupsWhile a -> a -> Bool
cmp (Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
_ s -> m b
final) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> GroupByState s s a Any -> m (Step (GroupByState s s a Any) b))
-> GroupByState s s a Any -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> GroupByState s s a Any -> m (Step (GroupByState s s a Any) b)
forall {m :: * -> *} {a} {b} {b}.
State StreamK m a
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b)
stepOuter (s -> GroupByState s s a Any
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
state)
where
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b)
stepOuter State StreamK m a
_ (GroupingInit s
st) = do
Step s b
res <- m (Step s b)
initial
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
res of
FL.Partial s
s -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> GroupByState s s a b
forall st fs a b. st -> fs -> GroupByState st fs a b
GroupingDo s
st s
s
FL.Done b
b -> b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
st
stepOuter State StreamK m a
gst (GroupingDo s
st s
fs) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
forall {fs} {b}.
SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
x s
s s
fs1
FL.Done b
b -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
Skip s
s -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> GroupByState s s a b
forall st fs a b. st -> fs -> GroupByState st fs a b
GroupingDo s
s s
fs
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step (GroupByState s s a b) b)
-> m (Step (GroupByState s s a b) b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (GroupByState s s a b) b
forall s a. Step s a
Stop
where
go :: SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go !SPEC
_ a
prev s
stt !s
acc = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
stt
case Step s a
res of
Yield a
x s
s -> do
if a -> a -> Bool
cmp a
prev a
x
then do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
prev s
s s
fs1
FL.Done b
b -> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s fs a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
else do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r (s -> a -> GroupByState s fs a b
forall st fs a b. st -> a -> GroupByState st fs a b
GroupingInitWith s
s a
x)
Skip s
s -> SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
prev s
s s
acc
Step s a
Stop -> do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r GroupByState s fs a b
forall st fs a b. GroupByState st fs a b
GroupingDone
stepOuter State StreamK m a
_ (GroupingInitWith s
st a
x) = do
Step s b
res <- m (Step s b)
initial
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
res of
FL.Partial s
s -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> a -> GroupByState s s a b
forall st fs a b. st -> fs -> a -> GroupByState st fs a b
GroupingDoWith s
st s
s a
x
FL.Done b
b -> b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> a -> GroupByState s s a b
forall st fs a b. st -> a -> GroupByState st fs a b
GroupingInitWith s
st a
x
stepOuter State StreamK m a
gst (GroupingDoWith s
st s
fs a
prev) = do
Step s b
res <- s -> a -> m (Step s b)
fstep s
fs a
prev
case Step s b
res of
FL.Partial s
fs1 -> SPEC -> s -> s -> m (Step (GroupByState s s a b) b)
forall {fs} {b}.
SPEC -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC s
st s
fs1
FL.Done b
b -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
st)
where
go :: SPEC -> s -> s -> m (Step (GroupByState s fs a b) b)
go !SPEC
_ s
stt !s
acc = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
stt
case Step s a
res of
Yield a
x s
s -> do
if a -> a -> Bool
cmp a
prev a
x
then do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC s
s s
fs1
FL.Done b
b -> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s fs a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
else do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r (s -> a -> GroupByState s fs a b
forall st fs a b. st -> a -> GroupByState st fs a b
GroupingInitWith s
s a
x)
Skip s
s -> SPEC -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC s
s s
acc
Step s a
Stop -> do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r GroupByState s fs a b
forall st fs a b. GroupByState st fs a b
GroupingDone
stepOuter State StreamK m a
_ (GroupingYield b
_ GroupByState s s a b
_) = String -> m (Step (GroupByState s s a b) b)
forall a. HasCallStack => String -> a
error String
"groupsWhile: Unreachable"
stepOuter State StreamK m a
_ GroupByState s s a b
GroupingDone = Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (GroupByState s s a b) b
forall s a. Step s a
Stop
{-# DEPRECATED groupsBy "Please use groupsWhile instead. Please note the change in the argument order of the comparison function." #-}
{-# INLINE_NORMAL groupsBy #-}
groupsBy :: Monad m
=> (a -> a -> Bool)
-> Fold m a b
-> Stream m a
-> Stream m b
groupsBy :: forall (m :: * -> *) a b.
Monad m =>
(a -> a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
groupsBy a -> a -> Bool
cmp = (a -> a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
forall (m :: * -> *) a b.
Monad m =>
(a -> a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
groupsWhile ((a -> a -> Bool) -> a -> a -> Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip a -> a -> Bool
cmp)
{-# INLINE_NORMAL groupsRollingBy #-}
groupsRollingBy :: Monad m
=> (a -> a -> Bool)
-> Fold m a b
-> Stream m a
-> Stream m b
groupsRollingBy :: forall (m :: * -> *) a b.
Monad m =>
(a -> a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
groupsRollingBy a -> a -> Bool
cmp (Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
_ s -> m b
final) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b))
-> GroupByState s s a b -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b)
stepOuter (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
state)
where
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> GroupByState s s a b -> m (Step (GroupByState s s a b) b)
stepOuter State StreamK m a
_ (GroupingInit s
st) = do
Step s b
res <- m (Step s b)
initial
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
res of
FL.Partial s
fs -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> GroupByState s s a b
forall st fs a b. st -> fs -> GroupByState st fs a b
GroupingDo s
st s
fs
FL.Done b
fb -> b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
fb (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
st
stepOuter State StreamK m a
gst (GroupingDo s
st s
fs) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
forall {fs} {b}.
SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
x s
s s
fs1
FL.Done b
fb -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
fb (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
Skip s
s -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> GroupByState s s a b
forall st fs a b. st -> fs -> GroupByState st fs a b
GroupingDo s
s s
fs
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step (GroupByState s s a b) b)
-> m (Step (GroupByState s s a b) b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (GroupByState s s a b) b
forall s a. Step s a
Stop
where
go :: SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go !SPEC
_ a
prev s
stt !s
acc = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
stt
case Step s a
res of
Yield a
x s
s -> do
if a -> a -> Bool
cmp a
prev a
x
then do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
x s
s s
fs1
FL.Done b
b -> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s fs a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
else do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r (s -> a -> GroupByState s fs a b
forall st fs a b. st -> a -> GroupByState st fs a b
GroupingInitWith s
s a
x)
Skip s
s -> SPEC -> a -> s -> s -> m (Step (GroupByState s fs a b) b)
go SPEC
SPEC a
prev s
s s
acc
Step s a
Stop -> do
b
r <- s -> m b
final s
acc
Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b))
-> Step (GroupByState s fs a b) b
-> m (Step (GroupByState s fs a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s fs a b -> Step (GroupByState s fs a b) b
forall s a. a -> s -> Step s a
Yield b
r GroupByState s fs a b
forall st fs a b. GroupByState st fs a b
GroupingDone
stepOuter State StreamK m a
_ (GroupingInitWith s
st a
x) = do
Step s b
res <- m (Step s b)
initial
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
res of
FL.Partial s
s -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. s -> Step s a
Skip (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> a -> GroupByState s s a b
forall st fs a b. st -> fs -> a -> GroupByState st fs a b
GroupingDoWith s
st s
s a
x
FL.Done b
b -> b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ s -> a -> GroupByState s s a b
forall st fs a b. st -> a -> GroupByState st fs a b
GroupingInitWith s
st a
x
stepOuter State StreamK m a
gst (GroupingDoWith s
st s
fs a
previous) = do
Step s b
res <- s -> a -> m (Step s b)
fstep s
fs a
previous
case Step s b
res of
FL.Partial s
s -> SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
go SPEC
SPEC a
previous s
st s
s
FL.Done b
b -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
st)
where
go :: SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
go !SPEC
_ a
prev !s
stt !s
acc = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
stt
case Step s a
res of
Yield a
x s
s -> do
if a -> a -> Bool
cmp a
prev a
x
then do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
go SPEC
SPEC a
x s
s s
fs1
FL.Done b
b -> Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
st)
else do
Step s b
result <- m (Step s b)
initial
b
r <- s -> m b
final s
acc
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
r
(GroupByState s s a b -> Step (GroupByState s s a b) b)
-> GroupByState s s a b -> Step (GroupByState s s a b) b
forall a b. (a -> b) -> a -> b
$ case Step s b
result of
FL.Partial s
fsi -> s -> s -> a -> GroupByState s s a b
forall st fs a b. st -> fs -> a -> GroupByState st fs a b
GroupingDoWith s
s s
fsi a
x
FL.Done b
b -> b -> GroupByState s s a b -> GroupByState s s a b
forall st fs a b.
b -> GroupByState st fs a b -> GroupByState st fs a b
GroupingYield b
b (s -> GroupByState s s a b
forall st fs a b. st -> GroupByState st fs a b
GroupingInit s
s)
Skip s
s -> SPEC -> a -> s -> s -> m (Step (GroupByState s s a b) b)
go SPEC
SPEC a
prev s
s s
acc
Step s a
Stop -> do
b
r <- s -> m b
final s
acc
Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
r GroupByState s s a b
forall st fs a b. GroupByState st fs a b
GroupingDone
stepOuter State StreamK m a
_ (GroupingYield b
r GroupByState s s a b
next) = Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b))
-> Step (GroupByState s s a b) b
-> m (Step (GroupByState s s a b) b)
forall a b. (a -> b) -> a -> b
$ b -> GroupByState s s a b -> Step (GroupByState s s a b) b
forall s a. a -> s -> Step s a
Yield b
r GroupByState s s a b
next
stepOuter State StreamK m a
_ GroupByState s s a b
GroupingDone = Step (GroupByState s s a b) b -> m (Step (GroupByState s s a b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (GroupByState s s a b) b
forall s a. Step s a
Stop
data WordsByState st fs b
= WordsByInit st
| WordsByDo st !fs
| WordsByDone
| WordsByYield !b (WordsByState st fs b)
{-# INLINE_NORMAL wordsBy #-}
wordsBy :: Monad m => (a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
wordsBy :: forall (m :: * -> *) a b.
Monad m =>
(a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
wordsBy a -> Bool
predicate (Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
_ s -> m b
final) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> WordsByState s s b -> m (Step (WordsByState s s b) b))
-> WordsByState s s b -> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> WordsByState s s b -> m (Step (WordsByState s s b) b)
forall {m :: * -> *} {a}.
State StreamK m a
-> WordsByState s s b -> m (Step (WordsByState s s b) b)
stepOuter (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
state)
where
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> WordsByState s s b -> m (Step (WordsByState s s b) b)
stepOuter State StreamK m a
_ (WordsByInit s
st) = do
Step s b
res <- m (Step s b)
initial
Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
res of
FL.Partial s
s -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. s -> Step s a
Skip (WordsByState s s b -> Step (WordsByState s s b) b)
-> WordsByState s s b -> Step (WordsByState s s b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> WordsByState s s b
forall st fs b. st -> fs -> WordsByState st fs b
WordsByDo s
st s
s
FL.Done b
b -> b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
st)
stepOuter State StreamK m a
gst (WordsByDo s
st s
fs) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
if a -> Bool
predicate a
x
then do
Step s b
resi <- m (Step s b)
initial
Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ case Step s b
resi of
FL.Partial s
fs1 -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. s -> Step s a
Skip (WordsByState s s b -> Step (WordsByState s s b) b)
-> WordsByState s s b -> Step (WordsByState s s b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> WordsByState s s b
forall st fs b. st -> fs -> WordsByState st fs b
WordsByDo s
s s
fs1
FL.Done b
b -> b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
s)
else do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> s -> s -> m (Step (WordsByState s s b) b)
go SPEC
SPEC s
s s
fs1
FL.Done b
b -> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
s)
Skip s
s -> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ WordsByState s s b -> Step (WordsByState s s b) b
forall s a. s -> Step s a
Skip (WordsByState s s b -> Step (WordsByState s s b) b)
-> WordsByState s s b -> Step (WordsByState s s b) b
forall a b. (a -> b) -> a -> b
$ s -> s -> WordsByState s s b
forall st fs b. st -> fs -> WordsByState st fs b
WordsByDo s
s s
fs
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step (WordsByState s s b) b)
-> m (Step (WordsByState s s b) b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (WordsByState s s b) b
forall s a. Step s a
Stop
where
go :: SPEC -> s -> s -> m (Step (WordsByState s s b) b)
go !SPEC
_ s
stt !s
acc = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
stt
case Step s a
res of
Yield a
x s
s -> do
if a -> Bool
predicate a
x
then do
Step s b
resi <- m (Step s b)
initial
b
r <- s -> m b
final s
acc
Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return
(Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
r
(WordsByState s s b -> Step (WordsByState s s b) b)
-> WordsByState s s b -> Step (WordsByState s s b) b
forall a b. (a -> b) -> a -> b
$ case Step s b
resi of
FL.Partial s
fs1 -> s -> s -> WordsByState s s b
forall st fs b. st -> fs -> WordsByState st fs b
WordsByDo s
s s
fs1
FL.Done b
b -> b -> WordsByState s s b -> WordsByState s s b
forall st fs b. b -> WordsByState st fs b -> WordsByState st fs b
WordsByYield b
b (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
s)
else do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC -> s -> s -> m (Step (WordsByState s s b) b)
go SPEC
SPEC s
s s
fs1
FL.Done b
b -> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
b (s -> WordsByState s s b
forall st fs b. st -> WordsByState st fs b
WordsByInit s
s)
Skip s
s -> SPEC -> s -> s -> m (Step (WordsByState s s b) b)
go SPEC
SPEC s
s s
acc
Step s a
Stop -> do
b
r <- s -> m b
final s
acc
Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
r WordsByState s s b
forall st fs b. WordsByState st fs b
WordsByDone
stepOuter State StreamK m a
_ WordsByState s s b
WordsByDone = Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (WordsByState s s b) b
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ (WordsByYield b
b WordsByState s s b
next) = Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b))
-> Step (WordsByState s s b) b -> m (Step (WordsByState s s b) b)
forall a b. (a -> b) -> a -> b
$ b -> WordsByState s s b -> Step (WordsByState s s b) b
forall s a. a -> s -> Step s a
Yield b
b WordsByState s s b
next
{-# ANN type TakeEndBySeqState Fuse #-}
data TakeEndBySeqState mba rb rh ck w s b x =
TakeEndBySeqInit
| TakeEndBySeqYield !b (TakeEndBySeqState mba rb rh ck w s b x)
| TakeEndBySeqDone
| TakeEndBySeqSingle s x
| TakeEndBySeqWordInit !Int !w s
| TakeEndBySeqWordLoop !w s
| TakeEndBySeqWordDone !Int !w
| TakeEndBySeqKRInit s mba
| TakeEndBySeqKRInit1 s mba !Int
| TakeEndBySeqKRLoop s mba !rh !ck
| TakeEndBySeqKRCheck s mba !rh
| TakeEndBySeqKRDone !Int rb
{-# INLINE_NORMAL takeEndBySeqWith #-}
takeEndBySeqWith
:: forall m a. (MonadIO m, Unbox a, Enum a, Eq a)
=> Bool
-> Array a
-> Stream m a
-> Stream m a
takeEndBySeqWith :: forall (m :: * -> *) a.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Stream m a -> Stream m a
takeEndBySeqWith Bool
withSep Array a
patArr (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> Stream m a
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {m :: * -> *} {a}.
State StreamK m a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
stepOuter TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x. TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqInit
where
patLen :: Int
patLen = Array a -> Int
forall a. Unbox a => Array a -> Int
A.length Array a
patArr
patBytes :: Int
patBytes = Array a -> Int
forall a. Array a -> Int
A.byteLength Array a
patArr
maxIndex :: Int
maxIndex = Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
maxOffset :: Int
maxOffset = Int
patBytes Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)
elemBits :: Int
elemBits = SIZE_OF(a) * 8
wordMask :: Word
wordMask :: Word
wordMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
patLen)) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
elemMask :: Word
elemMask :: Word
elemMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
wordPat :: Word
wordPat :: Word
wordPat = Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word -> a -> Word) -> Word -> Array a -> Word
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
0 Array a
patArr
addToWord :: a -> a -> a
addToWord a
wd a
a = (a
wd a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) a -> a -> a
forall a. Bits a => a -> a -> a
.|. Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
k :: Word32
k = Word32
2891336453 :: Word32
coeff :: Word32
coeff = Word32
k Word32 -> Int -> Word32
forall a b. (Num a, Integral b) => a -> b -> a
^ Int
patLen
addCksum :: Word32 -> a -> Word32
addCksum Word32
cksum a
a = Word32
cksum Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Word32
k Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
deltaCksum :: Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
new =
Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
cksum a
new Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
coeff Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
old)
patHash :: Word32
patHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
patArr
skip :: a -> m (Step a a)
skip = Step a a -> m (Step a a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step a a -> m (Step a a)) -> (a -> Step a a) -> a -> m (Step a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Step a a
forall s a. s -> Step s a
Skip
{-# INLINE yield #-}
yield :: b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield b
x !TakeEndBySeqState mba rb rh ck w s b x
s = TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a))
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
forall a b. (a -> b) -> a -> b
$ b
-> TakeEndBySeqState mba rb rh ck w s b x
-> TakeEndBySeqState mba rb rh ck w s b x
forall mba rb rh ck w s b x.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqYield b
x TakeEndBySeqState mba rb rh ck w s b x
s
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
stepOuter State StreamK m a
_ TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
TakeEndBySeqInit = do
case () of
()
_ | Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 -> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
| Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 -> do
a
pat <- IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> m a) -> IO a -> m a
forall a b. (a -> b) -> a -> b
$ Int -> Array a -> IO a
forall a. Unbox a => Int -> Array a -> IO a
A.unsafeGetIndexIO Int
0 Array a
patArr
Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. s -> Step s a
Skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall a b. (a -> b) -> a -> b
$ s
-> a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> x -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqSingle s
state a
pat
| SIZE_OF(a) * patLen <= sizeOf (Proxy :: Proxy Word) ->
Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. s -> Step s a
Skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall a b. (a -> b) -> a -> b
$ Int
-> Word
-> s
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordInit Int
0 Word
0 s
state
| Bool
otherwise -> do
(MutArray MutByteArray
mba Int
_ Int
_ Int
_) :: MutArray a <-
IO (MutArray a) -> m (MutArray a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MutArray a) -> m (MutArray a))
-> IO (MutArray a) -> m (MutArray a)
forall a b. (a -> b) -> a -> b
$ Int -> IO (MutArray a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
Int -> m (MutArray a)
MutArray.emptyOf Int
patLen
TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit s
state MutByteArray
mba
stepOuter State StreamK m a
_ (TakeEndBySeqYield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
next) = Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. a -> s -> Step s a
Yield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
next
stepOuter State StreamK m a
_ TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
TakeEndBySeqDone = Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (TakeEndBySeqSingle s
st a
pat) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s ->
if a
pat a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= a
x
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x (s
-> a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> x -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqSingle s
s a
pat)
else do
if Bool
withSep
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x. TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqDone
else Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> x -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqSingle s
s a
pat
Step s a
Stop -> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ (TakeEndBySeqWordDone Int
0 Word
_) = do
Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ (TakeEndBySeqWordDone Int
n Word
wrd) = do
let old :: Word
old = Word
elemMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word
wrd Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)))
in a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield
(Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old)
(Int
-> Word
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> w -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordDone (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Word
wrd)
stepOuter State StreamK m a
gst (TakeEndBySeqWordInit Int
idx Word
wrd s
st) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
next :: TakeEndBySeqState mba rb rh ck Word s b x
next
| Int
idx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
maxIndex =
Int -> Word -> s -> TakeEndBySeqState mba rb rh ck Word s b x
forall mba rb rh ck w s b x.
Int -> w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordInit (Int
idx Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Word
wrd1 s
s
| Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
/= Word
wordPat =
Word -> s -> TakeEndBySeqState mba rb rh ck Word s b x
forall mba rb rh ck w s b x.
w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordLoop Word
wrd1 s
s
| Bool
otherwise = TakeEndBySeqState mba rb rh ck Word s b x
forall mba rb rh ck w s b x. TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqDone
if Bool
withSep
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {mba} {rb} {rh} {ck} {b} {x}.
TakeEndBySeqState mba rb rh ck Word s b x
next
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {mba} {rb} {rh} {ck} {b} {x}.
TakeEndBySeqState mba rb rh ck Word s b x
next
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> Word
-> s
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordInit Int
idx Word
wrd s
s
Step s a
Stop ->
if Bool
withSep
then Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> Word
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> w -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordDone Int
idx Word
wrd
stepOuter State StreamK m a
gst (TakeEndBySeqWordLoop Word
wrd s
st) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
old :: Word
old = (Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wrd)
Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
!y :: a
y =
if Bool
withSep
then a
x
else Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old
if Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
/= Word
wordPat
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
y (Word
-> s
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordLoop Word
wrd1 s
s)
else a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
y TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x. TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqDone
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Word
-> s
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
w -> s -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordLoop Word
wrd s
s
Step s a
Stop ->
if Bool
withSep
then Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> Word
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> w -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqWordDone Int
patLen Word
wrd
stepOuter State StreamK m a
gst (TakeEndBySeqKRInit s
st0 MutByteArray
mba) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st0
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
0 MutByteArray
mba a
x
if Bool
withSep
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x (s
-> MutByteArray
-> Int
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> Int -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit1 s
s MutByteArray
mba (SIZE_OF(a)))
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> Int
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> Int -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit1 s
s MutByteArray
mba (SIZE_OF(a))
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit s
s MutByteArray
mba
Step s a
Stop -> Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (TakeEndBySeqKRInit1 s
st MutByteArray
mba Int
offset) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
let Array a
arr :: Array a = Array
{ arrContents :: MutByteArray
arrContents = MutByteArray
mba
, arrStart :: Int
arrStart = Int
0
, arrEnd :: Int
arrEnd = Int
patBytes
}
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
offset MutByteArray
mba a
x
let next :: TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next =
if Int
offset Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
maxOffset
then s
-> MutByteArray
-> Int
-> TakeEndBySeqState MutByteArray rb Int Word32 w s b x
forall mba rb rh ck w s b x.
s -> mba -> Int -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit1 s
s MutByteArray
mba (Int
offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ SIZE_OF(a))
else
let ringHash :: Word32
ringHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
arr
in if Word32
ringHash Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
patHash
then s
-> MutByteArray
-> Int
-> TakeEndBySeqState MutByteArray rb Int Word32 w s b x
forall mba rb rh ck w s b x.
s -> mba -> rh -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRCheck s
s MutByteArray
mba Int
0
else s
-> MutByteArray
-> Int
-> Word32
-> TakeEndBySeqState MutByteArray rb Int Word32 w s b x
forall mba rb rh ck w s b x.
s -> mba -> rh -> ck -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRLoop s
s MutByteArray
mba Int
0 Word32
ringHash
if Bool
withSep
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {rb} {w} {b} {x}.
TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {rb} {w} {b} {x}.
TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> Int
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> Int -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRInit1 s
s MutByteArray
mba Int
offset
Step s a
Stop -> do
if Bool
withSep
then Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
else do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
offset
, ringHead :: Int
ringHead = Int
0
}
in TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> RingArray a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> rb -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRDone Int
offset RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
gst (TakeEndBySeqKRLoop s
st MutByteArray
mba Int
rh Word32
cksum) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
case Step s a
res of
Yield a
x s
s -> do
(RingArray a
rb1, a
old) <- IO (RingArray a, a) -> m (RingArray a, a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (RingArray a -> a -> IO (RingArray a, a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
RingArray a -> a -> m (RingArray a, a)
RB.replace RingArray a
forall {a}. RingArray a
rb a
x)
let cksum1 :: Word32
cksum1 = Word32 -> a -> a -> Word32
forall {a} {a}. (Enum a, Enum a) => Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
x
let rh1 :: Int
rh1 = RingArray a -> Int
forall a. RingArray a -> Int
ringHead RingArray a
rb1
next :: TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next =
if Word32
cksum1 Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word32
patHash
then s
-> MutByteArray
-> Int
-> Word32
-> TakeEndBySeqState MutByteArray rb Int Word32 w s b x
forall mba rb rh ck w s b x.
s -> mba -> rh -> ck -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRLoop s
s MutByteArray
mba Int
rh1 Word32
cksum1
else s
-> MutByteArray
-> Int
-> TakeEndBySeqState MutByteArray rb Int Word32 w s b x
forall mba rb rh ck w s b x.
s -> mba -> rh -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRCheck s
s MutByteArray
mba Int
rh1
if Bool
withSep
then a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
x TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {rb} {w} {b} {x}.
TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next
else a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
old TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
forall {rb} {w} {b} {x}.
TakeEndBySeqState MutByteArray rb Int Word32 w s b x
next
Skip s
s -> TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> Int
-> Word32
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> rh -> ck -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRLoop s
s MutByteArray
mba Int
rh Word32
cksum
Step s a
Stop -> do
if Bool
withSep
then Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> RingArray a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> rb -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRDone Int
patBytes RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
_ (TakeEndBySeqKRCheck s
st MutByteArray
mba Int
rh) = do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
Bool
matches <- IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ RingArray a -> Array a -> IO Bool
forall a. RingArray a -> Array a -> IO Bool
RB.eqArray RingArray a
forall {a}. RingArray a
rb Array a
patArr
if Bool
matches
then Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
else TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {a} {a}. a -> m (Step a a)
skip (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ s
-> MutByteArray
-> Int
-> Word32
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
s -> mba -> rh -> ck -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRLoop s
st MutByteArray
mba Int
rh Word32
patHash
stepOuter State StreamK m a
_ (TakeEndBySeqKRDone Int
0 RingArray a
_) = Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ (TakeEndBySeqKRDone Int
len RingArray a
rb) = do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
len Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
a
old <- RingArray a -> m a
forall (m :: * -> *) a. (MonadIO m, Unbox a) => RingArray a -> m a
RB.unsafeGetHead RingArray a
rb
let rb1 :: RingArray a
rb1 = RingArray a -> RingArray a
forall a. Unbox a => RingArray a -> RingArray a
RB.moveForward RingArray a
rb
a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall {b} {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
b
-> TakeEndBySeqState mba rb rh ck w s b x
-> m (Step (TakeEndBySeqState mba rb rh ck w s b x) a)
yield a
old (TakeEndBySeqState MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a))
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
-> m (Step
(TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> RingArray a
-> TakeEndBySeqState
MutByteArray (RingArray a) Int Word32 Word s a a
forall mba rb rh ck w s b x.
Int -> rb -> TakeEndBySeqState mba rb rh ck w s b x
TakeEndBySeqKRDone (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)) rb1
{-# INLINE takeEndBySeq #-}
takeEndBySeq
:: forall m a. (MonadIO m, Unbox a, Enum a, Eq a)
=> Array a
-> Stream m a
-> Stream m a
takeEndBySeq :: forall (m :: * -> *) a.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Array a -> Stream m a -> Stream m a
takeEndBySeq = Bool -> Array a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Stream m a -> Stream m a
takeEndBySeqWith Bool
True
{-# INLINE takeEndBySeq_ #-}
takeEndBySeq_
:: forall m a. (MonadIO m, Unbox a, Enum a, Eq a)
=> Array a
-> Stream m a
-> Stream m a
takeEndBySeq_ :: forall (m :: * -> *) a.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Array a -> Stream m a -> Stream m a
takeEndBySeq_ = Bool -> Array a -> Stream m a -> Stream m a
forall (m :: * -> *) a.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Stream m a -> Stream m a
takeEndBySeqWith Bool
False
{-# ANN type SplitOnSeqState Fuse #-}
data SplitOnSeqState mba rb rh ck w fs s b x =
SplitOnSeqInit
| SplitOnSeqYield b (SplitOnSeqState mba rb rh ck w fs s b x)
| SplitOnSeqDone
| SplitOnSeqEmpty !fs s
| SplitOnSeqSingle0 !fs s x
| SplitOnSeqSingle !fs s x
| SplitOnSeqWordInit0 !fs s
| SplitOnSeqWordInit Int Word !fs s
| SplitOnSeqWordLoop !w s !fs
| SplitOnSeqWordDone Int !fs !w
| SplitOnSeqKRInit0 Int !fs s mba
| SplitOnSeqKRInit Int !fs s mba
| SplitOnSeqKRLoop fs s mba !rh !ck
| SplitOnSeqKRCheck fs s mba !rh
| SplitOnSeqKRDone Int !fs rb
| SplitOnSeqReinit (fs -> SplitOnSeqState mba rb rh ck w fs s b x)
{-# INLINE_NORMAL splitSepBySeq_ #-}
splitSepBySeq_, splitOnSeq
:: forall m a b. (MonadIO m, Unbox a, Enum a, Eq a)
=> Array a
-> Fold m a b
-> Stream m a
-> Stream m b
splitSepBySeq_ :: forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Array a -> Fold m a b -> Stream m a -> Stream m b
splitSepBySeq_ Array a
patArr (Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
_ s -> m b
final) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {m :: * -> *} {a}.
State StreamK m a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
stepOuter SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqInit
where
patLen :: Int
patLen = Array a -> Int
forall a. Unbox a => Array a -> Int
A.length Array a
patArr
patBytes :: Int
patBytes = Array a -> Int
forall a. Array a -> Int
A.byteLength Array a
patArr
maxIndex :: Int
maxIndex = Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
maxOffset :: Int
maxOffset = Int
patBytes Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)
elemBits :: Int
elemBits = SIZE_OF(a) * 8
wordMask :: Word
wordMask :: Word
wordMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
patLen)) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
elemMask :: Word
elemMask :: Word
elemMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
wordPat :: Word
wordPat :: Word
wordPat = Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word -> a -> Word) -> Word -> Array a -> Word
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
0 Array a
patArr
addToWord :: a -> a -> a
addToWord a
wd a
a = (a
wd a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) a -> a -> a
forall a. Bits a => a -> a -> a
.|. Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
k :: Word32
k = Word32
2891336453 :: Word32
coeff :: Word32
coeff = Word32
k Word32 -> Int -> Word32
forall a b. (Num a, Integral b) => a -> b -> a
^ Int
patLen
addCksum :: Word32 -> a -> Word32
addCksum Word32
cksum a
a = Word32
cksum Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Word32
k Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
deltaCksum :: Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
new =
Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
cksum a
new Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
coeff Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
old)
patHash :: Word32
patHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
patArr
skip :: a -> m (Step a a)
skip = Step a a -> m (Step a a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step a a -> m (Step a a)) -> (a -> Step a a) -> a -> m (Step a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Step a a
forall s a. s -> Step s a
Skip
nextAfterInit :: (fs -> SplitOnSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSeqState mba rb rh ck w fs s b x
nextAfterInit fs -> SplitOnSeqState mba rb rh ck w fs s b x
nextGen Step fs b
stepRes =
case Step fs b
stepRes of
FL.Partial fs
s -> fs -> SplitOnSeqState mba rb rh ck w fs s b x
nextGen fs
s
FL.Done b
b -> b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
b ((fs -> SplitOnSeqState mba rb rh ck w fs s b x)
-> SplitOnSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
(fs -> SplitOnSeqState mba rb rh ck w fs s b x)
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqReinit fs -> SplitOnSeqState mba rb rh ck w fs s b x
nextGen)
{-# INLINE yieldReinit #-}
yieldReinit :: (s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck w s s b x
nextGen b
fs =
m (Step s b)
initial m (Step s b)
-> (Step s b
-> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a))
-> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SplitOnSeqState mba rb rh ck w s s b x
-> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState mba rb rh ck w s s b x
-> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a))
-> (Step s b -> SplitOnSeqState mba rb rh ck w s s b x)
-> Step s b
-> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b
-> SplitOnSeqState mba rb rh ck w s s b x
-> SplitOnSeqState mba rb rh ck w s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
fs (SplitOnSeqState mba rb rh ck w s s b x
-> SplitOnSeqState mba rb rh ck w s s b x)
-> (Step s b -> SplitOnSeqState mba rb rh ck w s s b x)
-> Step s b
-> SplitOnSeqState mba rb rh ck w s s b x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s -> SplitOnSeqState mba rb rh ck w s s b x)
-> Step s b -> SplitOnSeqState mba rb rh ck w s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {s} {b} {x}.
(fs -> SplitOnSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSeqState mba rb rh ck w fs s b x
nextAfterInit s -> SplitOnSeqState mba rb rh ck w s s b x
nextGen
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
stepOuter State StreamK m a
_ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
SplitOnSeqInit = do
Step s b
res <- m (Step s b)
initial
case Step s b
res of
FL.Partial s
acc
| Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 ->
Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqEmpty s
acc s
state
| Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 -> do
a
pat <- IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> m a) -> IO a -> m a
forall a b. (a -> b) -> a -> b
$ Int -> Array a -> IO a
forall a. Unbox a => Int -> Array a -> IO a
A.unsafeGetIndexIO Int
0 Array a
patArr
Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqSingle0 s
acc s
state a
pat
| SIZE_OF(a) * patLen <= sizeOf (Proxy :: Proxy Word) ->
Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordInit0 s
acc s
state
| Bool
otherwise -> do
(MutArray MutByteArray
mba Int
_ Int
_ Int
_) :: MutArray a <-
IO (MutArray a) -> m (MutArray a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MutArray a) -> m (MutArray a))
-> IO (MutArray a) -> m (MutArray a)
forall a b. (a -> b) -> a -> b
$ Int -> IO (MutArray a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
Int -> m (MutArray a)
MutArray.emptyOf Int
patLen
SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> s
-> MutByteArray
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit0 Int
0 s
acc s
state MutByteArray
mba
FL.Done b
b -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
b SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqInit
stepOuter State StreamK m a
_ (SplitOnSeqYield b
x SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
next) = Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. a -> s -> Step s a
Yield b
x SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
next
stepOuter State StreamK m a
_ (SplitOnSeqReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
nextGen) =
m (Step s b)
initial m (Step s b)
-> (Step s b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> (Step s b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> Step s b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> Step s b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {s} {b} {x}.
(fs -> SplitOnSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSeqState mba rb rh ck w fs s b x
nextAfterInit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
nextGen
stepOuter State StreamK m a
gst (SplitOnSeqEmpty s
acc s
st) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
b
b1 <-
case Step s b
r of
FL.Partial s
acc1 -> s -> m b
final s
acc1
FL.Done b
b -> b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return b
b
let jump :: fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump fs
c = fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqEmpty fs
c s
s
in (s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump b
b1
Skip s
s -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (s
-> s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqEmpty s
acc s
s)
Step s a
Stop -> s -> m b
final s
acc m b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
SplitOnSeqDone = Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSeqSingle0 s
fs s
st a
pat) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump fs
c = fs -> s -> a -> SplitOnSeqState mba rb rh ck w fs s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqSingle fs
c s
s a
pat
if a
pat a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
x
then s -> m b
final s
fs m b
-> (b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump
else do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 ->
Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqSingle s
fs1 s
s a
pat
FL.Done b
b -> (s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump b
b
Skip s
s -> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqSingle0 s
fs s
s a
pat
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSeqSingle s
fs0 s
st0 a
pat) = do
SPEC
-> s
-> s
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {a}.
SPEC
-> s -> s -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
go SPEC
SPEC s
fs0 s
st0
where
go :: SPEC
-> s -> s -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
go !SPEC
_ !s
fs !s
st = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump fs
c = fs -> s -> a -> SplitOnSeqState mba rb rh ck w fs s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqSingle fs
c s
s a
pat
if a
pat a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
x
then s -> m b
final s
fs m b
-> (b -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a))
-> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s -> SplitOnSeqState mba rb rh ck w s s b a)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck w s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump
else do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 -> SPEC
-> s -> s -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
go SPEC
SPEC s
fs1 s
s
FL.Done b
b -> (s -> SplitOnSeqState mba rb rh ck w s s b a)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck w s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSeqState mba rb rh ck w fs s b a
jump b
b
Skip s
s -> SPEC
-> s -> s -> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
go SPEC
SPEC s
fs s
s
Step s a
Stop -> do
b
r <- s -> m b
final s
fs
Step (SplitOnSeqState mba rb rh ck w s s b a) a
-> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitOnSeqState mba rb rh ck w s s b a) a
-> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a))
-> Step (SplitOnSeqState mba rb rh ck w s s b a) a
-> m (Step (SplitOnSeqState mba rb rh ck w s s b a) a)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState mba rb rh ck w s s b a
-> Step (SplitOnSeqState mba rb rh ck w s s b a) a
forall s a. s -> Step s a
Skip (SplitOnSeqState mba rb rh ck w s s b a
-> Step (SplitOnSeqState mba rb rh ck w s s b a) a)
-> SplitOnSeqState mba rb rh ck w s s b a
-> Step (SplitOnSeqState mba rb rh ck w s s b a) a
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState mba rb rh ck w s s b a
-> SplitOnSeqState mba rb rh ck w s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
r SplitOnSeqState mba rb rh ck w s s b a
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqDone
stepOuter State StreamK m a
_ (SplitOnSeqWordDone Int
0 s
fs Word
_) = do
b
r <- s -> m b
final s
fs
SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
r SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqDone
stepOuter State StreamK m a
_ (SplitOnSeqWordDone Int
n s
fs Word
wrd) = do
let old :: Word
old = Word
elemMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word
wrd Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)))
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs (Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old)
case Step s b
r of
FL.Partial s
fs1 -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> Word
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordDone (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) s
fs1 Word
wrd
FL.Done b
b -> do
let jump :: fs -> SplitOnSeqState mba rb rh ck Word fs s b x
jump fs
c = Int -> fs -> Word -> SplitOnSeqState mba rb rh ck Word fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordDone (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) fs
c Word
wrd
(s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {s} {b} {x}.
fs -> SplitOnSeqState mba rb rh ck Word fs s b x
jump b
b
stepOuter State StreamK m a
gst (SplitOnSeqWordInit0 s
fs s
st) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s ->
let wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
0 a
x
in Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ Int
-> Word
-> s
-> s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> Word -> fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordInit Int
1 Word
wrd1 s
fs s
s
Skip s
s -> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. s -> Step s a
Skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall a b. (a -> b) -> a -> b
$ s
-> s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordInit0 s
fs s
s
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSeqWordInit Int
idx0 Word
wrd0 s
fs s
st0) =
SPEC
-> Int
-> Word
-> s
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {x} {a}.
SPEC
-> Int
-> Word
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Int
idx0 Word
wrd0 s
st0
where
{-# INLINE go #-}
go :: SPEC
-> Int
-> Word
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go !SPEC
_ !Int
idx !Word
wrd !s
st = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
if Int
idx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
maxIndex
then do
if Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
== Word
wordPat
then do
let jump :: fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump fs
c = Int -> Word -> fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> Word -> fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordInit Int
0 Word
0 fs
c s
s
s -> m b
final s
fs m b
-> (b -> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s -> SplitOnSeqState mba rb rh ck Word s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump
else SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Word -> s -> s -> SplitOnSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
w -> s -> fs -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordLoop Word
wrd1 s
s s
fs
else SPEC
-> Int
-> Word
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC (Int
idx Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Word
wrd1 s
s
Skip s
s -> SPEC
-> Int
-> Word
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Int
idx Word
wrd s
s
Step s a
Stop -> do
if Int
idx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
0
then SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Int -> s -> Word -> SplitOnSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordDone Int
idx s
fs Word
wrd
else do
b
r <- s -> m b
final s
fs
SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState mba rb rh ck Word s s b x
-> SplitOnSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
r SplitOnSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqDone
stepOuter State StreamK m a
gst (SplitOnSeqWordLoop Word
wrd0 s
st0 s
fs0) =
SPEC
-> Word
-> s
-> s
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {x} {a}.
SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd0 s
st0 s
fs0
where
{-# INLINE go #-}
go :: SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go !SPEC
_ !Word
wrd !s
st !s
fs = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump fs
c = Int -> Word -> fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> Word -> fs -> s -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordInit Int
0 Word
0 fs
c s
s
wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
old :: Word
old = (Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wrd)
Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs (Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old)
case Step s b
r of
FL.Partial s
fs1 -> do
if Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
== Word
wordPat
then s -> m b
final s
fs1 m b
-> (b -> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s -> SplitOnSeqState mba rb rh ck Word s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump
else SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd1 s
s s
fs1
FL.Done b
b -> (s -> SplitOnSeqState mba rb rh ck Word s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState mba rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd s
s s
fs
Step s a
Stop -> SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Int -> s -> Word -> SplitOnSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqWordDone Int
patLen s
fs Word
wrd
stepOuter State StreamK m a
gst (SplitOnSeqKRInit0 Int
offset s
fs s
st MutByteArray
mba) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
offset MutByteArray
mba a
x
SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> s
-> MutByteArray
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit (Int
offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ SIZE_OF(a)) fs s mba
Skip s
s -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> s
-> MutByteArray
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit0 Int
offset s
fs s
s MutByteArray
mba
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSeqKRInit Int
offset s
fs s
st MutByteArray
mba) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
offset MutByteArray
mba a
x
if Int
offset Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
maxOffset
then do
let Array a
arr :: Array a = Array
{ arrContents :: MutByteArray
arrContents = MutByteArray
mba
, arrStart :: Int
arrStart = Int
0
, arrEnd :: Int
arrEnd = Int
patBytes
}
let ringHash :: Word32
ringHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
arr
if Word32
ringHash Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
patHash Bool -> Bool -> Bool
&& Array a -> Array a -> Bool
forall a. Array a -> Array a -> Bool
A.byteEq Array a
arr Array a
patArr
then SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> rh -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRCheck s
fs s
s MutByteArray
mba Int
0
else SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> Word32
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs
-> s -> mba -> rh -> ck -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRLoop s
fs s
s MutByteArray
mba Int
0 Word32
ringHash
else SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> s
-> MutByteArray
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit (Int
offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ SIZE_OF(a)) fs s mba
Skip s
s -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> s
-> MutByteArray
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit Int
offset s
fs s
s MutByteArray
mba
Step s a
Stop -> do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
offset
, ringHead :: Int
ringHead = Int
0
}
SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRDone Int
offset s
fs RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
gst (SplitOnSeqKRLoop s
fs0 s
st0 MutByteArray
mba Int
rh0 Word32
cksum0) =
SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {ck} {w} {x} {a}.
SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
go SPEC
SPEC s
fs0 s
st0 Int
rh0 Word32
cksum0
where
go :: SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
go !SPEC
_ !s
fs !s
st !Int
rh !Word32
cksum = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
case Step s a
res of
Yield a
x s
s -> do
(RingArray a
rb1, a
old) <- IO (RingArray a, a) -> m (RingArray a, a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (RingArray a -> a -> IO (RingArray a, a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
RingArray a -> a -> m (RingArray a, a)
RB.replace RingArray a
forall {a}. RingArray a
rb a
x)
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
old
case Step s b
r of
FL.Partial s
fs1 -> do
let cksum1 :: Word32
cksum1 = Word32 -> a -> a -> Word32
forall {a} {a}. (Enum a, Enum a) => Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
x
let rh1 :: Int
rh1 = RingArray a -> Int
forall a. RingArray a -> Int
ringHead RingArray a
rb1
if Word32
cksum1 Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
patHash
then SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a))
-> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> rh -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRCheck s
fs1 s
s MutByteArray
mba Int
rh1
else SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
go SPEC
SPEC s
fs1 s
s Int
rh1 Word32
cksum1
FL.Done b
b -> do
let jump :: fs -> SplitOnSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = Int
-> fs
-> s
-> MutByteArray
-> SplitOnSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit Int
0 fs
c s
s MutByteArray
mba
(s -> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x)
-> b
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState MutByteArray rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
go SPEC
SPEC s
fs s
s Int
rh Word32
cksum
Step s a
Stop -> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a))
-> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x) a)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSeqState MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRDone Int
patBytes s
fs RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
_ (SplitOnSeqKRCheck s
fs s
st MutByteArray
mba Int
rh) = do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
Bool
res <- IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ RingArray a -> Array a -> IO Bool
forall a. RingArray a -> Array a -> IO Bool
RB.eqArray RingArray a
forall {a}. RingArray a
rb Array a
patArr
if Bool
res
then do
b
r <- s -> m b
final s
fs
let jump :: fs -> SplitOnSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = Int
-> fs
-> s
-> MutByteArray
-> SplitOnSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> s -> mba -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRInit Int
0 fs
c s
st MutByteArray
mba
(s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSeqState MutByteArray rb rh ck w fs s b x
jump b
r
else SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> Word32
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs
-> s -> mba -> rh -> ck -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRLoop s
fs s
st MutByteArray
mba Int
rh Word32
patHash
stepOuter State StreamK m a
_ (SplitOnSeqKRDone Int
0 s
fs RingArray a
_) = do
b
r <- s -> m b
final s
fs
SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSeqState mba rb rh ck w fs s b x
-> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqYield b
r SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqDone
stepOuter State StreamK m a
_ (SplitOnSeqKRDone Int
len s
fs RingArray a
rb) = do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
len Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
a
old <- RingArray a -> m a
forall (m :: * -> *) a. (MonadIO m, Unbox a) => RingArray a -> m a
RB.unsafeGetHead RingArray a
rb
let rb1 :: RingArray a
rb1 = RingArray a -> RingArray a
forall a. Unbox a => RingArray a -> RingArray a
RB.moveForward RingArray a
rb
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
old
case Step s b
r of
FL.Partial s
fs1 -> SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSeqState MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRDone (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)) fs1 rb1
FL.Done b
b -> do
let jump :: fs -> SplitOnSeqState mba (RingArray a) rh ck w fs s b x
jump fs
c = Int
-> fs
-> RingArray a
-> SplitOnSeqState mba (RingArray a) rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSeqState mba rb rh ck w fs s b x
SplitOnSeqKRDone (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)) c rb1
(s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rh} {ck} {w} {s} {b} {x}.
fs -> SplitOnSeqState mba (RingArray a) rh ck w fs s b x
jump b
b
RENAME(splitOnSeq,splitSepBySeq_)
{-# ANN type SplitOnSuffixSeqState Fuse #-}
data SplitOnSuffixSeqState mba rb rh ck w fs s b x =
SplitOnSuffixSeqInit
| SplitOnSuffixSeqYield b (SplitOnSuffixSeqState mba rb rh ck w fs s b x)
| SplitOnSuffixSeqDone
| SplitOnSuffixSeqEmpty !fs s
| SplitOnSuffixSeqSingleInit !fs s x
| SplitOnSuffixSeqSingle !fs s x
| SplitOnSuffixSeqWordInit !fs s
| SplitOnSuffixSeqWordLoop !w s !fs
| SplitOnSuffixSeqWordDone Int !fs !w
| SplitOnSuffixSeqKRInit !fs s mba
| SplitOnSuffixSeqKRInit1 !fs s mba
| SplitOnSuffixSeqKRLoop fs s mba !rh !ck
| SplitOnSuffixSeqKRCheck fs s mba !rh
| SplitOnSuffixSeqKRDone Int !fs rb
| SplitOnSuffixSeqReinit
(fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
{-# INLINE_NORMAL splitOnSuffixSeq #-}
splitOnSuffixSeq
:: forall m a b. (MonadIO m, Unbox a, Enum a, Eq a)
=> Bool
-> Array a
-> Fold m a b
-> Stream m a
-> Stream m b
splitOnSuffixSeq :: forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Fold m a b -> Stream m a -> Stream m b
splitOnSuffixSeq Bool
withSep Array a
patArr (Fold s -> a -> m (Step s b)
fstep m (Step s b)
initial s -> m b
_ s -> m b
final) (Stream State StreamK m a -> s -> m (Step s a)
step s
state) =
(State StreamK m b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Stream m b
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {m :: * -> *} {a}.
State StreamK m a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
stepOuter SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqInit
where
patLen :: Int
patLen = Array a -> Int
forall a. Unbox a => Array a -> Int
A.length Array a
patArr
patBytes :: Int
patBytes = Array a -> Int
forall a. Array a -> Int
A.byteLength Array a
patArr
maxIndex :: Int
maxIndex = Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
maxOffset :: Int
maxOffset = Int
patBytes Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)
elemBits :: Int
elemBits = SIZE_OF(a) * 8
wordMask :: Word
wordMask :: Word
wordMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
patLen)) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
elemMask :: Word
elemMask :: Word
elemMask = (Word
1 Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) Word -> Word -> Word
forall a. Num a => a -> a -> a
- Word
1
wordPat :: Word
wordPat :: Word
wordPat = Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word -> a -> Word) -> Word -> Array a -> Word
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
0 Array a
patArr
addToWord :: a -> a -> a
addToWord a
wd a
a = (a
wd a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftL` Int
elemBits) a -> a -> a
forall a. Bits a => a -> a -> a
.|. Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
nextAfterInit :: (fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextAfterInit fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextGen Step fs b
stepRes =
case Step fs b
stepRes of
FL.Partial fs
s -> fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextGen fs
s
FL.Done b
b ->
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
b ((fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
(fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqReinit fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextGen)
{-# INLINE yieldReinit #-}
yieldReinit :: (s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck w s s b x
nextGen b
fs =
m (Step s b)
initial m (Step s b)
-> (Step s b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a))
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SplitOnSuffixSeqState mba rb rh ck w s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck w s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a))
-> (Step s b -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> Step s b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b
-> SplitOnSuffixSeqState mba rb rh ck w s s b x
-> SplitOnSuffixSeqState mba rb rh ck w s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
fs (SplitOnSuffixSeqState mba rb rh ck w s s b x
-> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> (Step s b -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> Step s b
-> SplitOnSuffixSeqState mba rb rh ck w s s b x
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> Step s b -> SplitOnSuffixSeqState mba rb rh ck w s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {s} {b} {x}.
(fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextAfterInit s -> SplitOnSuffixSeqState mba rb rh ck w s s b x
nextGen
{-# INLINE processYieldSingle #-}
processYieldSingle :: a
-> a
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
processYieldSingle a
pat a
x s
s s
fs = do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b a
jump fs
c = fs -> s -> a -> SplitOnSuffixSeqState mba rb rh ck w fs s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqSingleInit fs
c s
s a
pat
if a
pat a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
x
then do
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs a
x else Step s b -> m (Step s b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step s b -> m (Step s b)) -> Step s b -> m (Step s b)
forall a b. (a -> b) -> a -> b
$ s -> Step s b
forall s b. s -> Step s b
FL.Partial s
fs
b
b1 <-
case Step s b
r of
FL.Partial s
fs1 -> s -> m b
final s
fs1
FL.Done b
b -> b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return b
b
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b a)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck w s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b a
jump b
b1
else do
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
x
case Step s b
r of
FL.Partial s
fs1 -> SplitOnSuffixSeqState mba rb rh ck w s s b a
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck w s s b a
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a))
-> SplitOnSuffixSeqState mba rb rh ck w s s b a
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
forall a b. (a -> b) -> a -> b
$ s -> s -> a -> SplitOnSuffixSeqState mba rb rh ck w s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqSingle s
fs1 s
s a
pat
FL.Done b
b -> (s -> SplitOnSuffixSeqState mba rb rh ck w s s b a)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck w s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b a
jump b
b
k :: Word32
k = Word32
2891336453 :: Word32
coeff :: Word32
coeff = Word32
k Word32 -> Int -> Word32
forall a b. (Num a, Integral b) => a -> b -> a
^ Int
patLen
addCksum :: Word32 -> a -> Word32
addCksum Word32
cksum a
a = Word32
cksum Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Word32
k Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
+ Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
a)
deltaCksum :: Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
new =
Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
cksum a
new Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
- Word32
coeff Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (a -> Int
forall a. Enum a => a -> Int
fromEnum a
old)
patHash :: Word32
patHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
patArr
skip :: a -> m (Step a a)
skip = Step a a -> m (Step a a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step a a -> m (Step a a)) -> (a -> Step a a) -> a -> m (Step a a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Step a a
forall s a. s -> Step s a
Skip
{-# INLINE_LATE stepOuter #-}
stepOuter :: State StreamK m a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
stepOuter State StreamK m a
_ SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
SplitOnSuffixSeqInit = do
Step s b
res <- m (Step s b)
initial
case Step s b
res of
FL.Partial s
fs
| Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqEmpty s
fs s
state
| Int
patLen Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
1 -> do
a
pat <- IO a -> m a
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> m a) -> IO a -> m a
forall a b. (a -> b) -> a -> b
$ Int -> Array a -> IO a
forall a. Unbox a => Int -> Array a -> IO a
A.unsafeGetIndexIO Int
0 Array a
patArr
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqSingleInit s
fs s
state a
pat
| SIZE_OF(a) * patLen <= sizeOf (Proxy :: Proxy Word) ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordInit s
fs s
state
| Bool
otherwise -> do
(MutArray MutByteArray
mba Int
_ Int
_ Int
_) :: MutArray a <-
IO (MutArray a) -> m (MutArray a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (MutArray a) -> m (MutArray a))
-> IO (MutArray a) -> m (MutArray a)
forall a b. (a -> b) -> a -> b
$ Int -> IO (MutArray a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
Int -> m (MutArray a)
MutArray.emptyOf Int
patLen
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit s
fs s
state MutByteArray
mba
FL.Done b
fb -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
fb SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqInit
stepOuter State StreamK m a
_ (SplitOnSuffixSeqYield b
x SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
next) = Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. a -> s -> Step s a
Yield b
x SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
next
stepOuter State StreamK m a
_ (SplitOnSuffixSeqReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
nextGen) =
m (Step s b)
initial m (Step s b)
-> (Step s b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> (Step s b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> Step s b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> Step s b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {s} {b} {x}.
(fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x)
-> Step fs b -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
nextAfterInit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
nextGen
stepOuter State StreamK m a
gst (SplitOnSuffixSeqEmpty s
acc s
st) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump fs
c = fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqEmpty fs
c s
s
Step s b
r <- s -> a -> m (Step s b)
fstep s
acc a
x
b
b1 <-
case Step s b
r of
FL.Partial s
fs -> s -> m b
final s
fs
FL.Done b
b -> b -> m b
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return b
b
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump b
b1
Skip s
s -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (s
-> s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqEmpty s
acc s
s)
Step s a
Stop -> s -> m b
final s
acc m b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
_ SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
SplitOnSuffixSeqDone = Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSuffixSeqSingleInit s
fs s
st a
pat) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> a
-> a
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {s} {mba} {rb} {rh} {ck} {w} {a}.
a
-> a
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
processYieldSingle a
pat a
x s
s s
fs
Skip s
s -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqSingleInit s
fs s
s a
pat
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSuffixSeqSingle s
fs s
st a
pat) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> a
-> a
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {s} {mba} {rb} {rh} {ck} {w} {a}.
a
-> a
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b a) a)
processYieldSingle a
pat a
x s
s s
fs
Skip s
s -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> x -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqSingle s
fs s
s a
pat
Step s a
Stop -> do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
stepOuter State StreamK m a
_ (SplitOnSuffixSeqWordDone Int
0 s
fs Word
_) = do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
stepOuter State StreamK m a
_ (SplitOnSuffixSeqWordDone Int
n s
fs Word
wrd) = do
let old :: Word
old = Word
elemMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. (Word
wrd Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)))
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs (Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old)
case Step s b
r of
FL.Partial s
fs1 -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> Word
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordDone (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) s
fs1 Word
wrd
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck Word fs s b x
jump fs
c = Int
-> fs -> Word -> SplitOnSuffixSeqState mba rb rh ck Word fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordDone (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) fs
c Word
wrd
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {s} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck Word fs s b x
jump b
b
stepOuter State StreamK m a
gst (SplitOnSuffixSeqWordInit s
fs0 s
st0) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st0
case Step s a
res of
Yield a
x s
s -> do
let wrd :: Word
wrd = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
0 a
x
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs0 a
x else Step s b -> m (Step s b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step s b -> m (Step s b)) -> Step s b -> m (Step s b)
forall a b. (a -> b) -> a -> b
$ s -> Step s b
forall s b. s -> Step s b
FL.Partial s
fs0
case Step s b
r of
FL.Partial s
fs1 -> SPEC
-> Int
-> Word
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {x} {a}.
SPEC
-> Int
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Int
1 Word
wrd s
s s
fs1
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump fs
c = fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordInit fs
c s
s
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump b
b
Skip s
s -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (s
-> s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordInit s
fs0 s
s)
Step s a
Stop -> s -> m b
final s
fs0 m b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
where
{-# INLINE go #-}
go :: SPEC
-> Int
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go !SPEC
_ !Int
idx !Word
wrd !s
st !s
fs = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump fs
c = fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordInit fs
c s
s
let wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs a
x else Step s b -> m (Step s b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step s b -> m (Step s b)) -> Step s b -> m (Step s b)
forall a b. (a -> b) -> a -> b
$ s -> Step s b
forall s b. s -> Step s b
FL.Partial s
fs
case Step s b
r of
FL.Partial s
fs1
| Int
idx Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
maxIndex ->
SPEC
-> Int
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC (Int
idx Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Word
wrd1 s
s s
fs1
| Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
/= Word
wordPat ->
SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Word -> s -> s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
w -> s -> fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordLoop Word
wrd1 s
s s
fs1
| Bool
otherwise ->
s -> m b
final s
fs1 m b
-> (b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x)
-> b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump
FL.Done b
b -> (s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x)
-> b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> Int
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Int
idx Word
wrd s
s s
fs
Step s a
Stop ->
if Bool
withSep
then do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
else SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Int -> s -> Word -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordDone Int
idx s
fs Word
wrd
stepOuter State StreamK m a
gst (SplitOnSuffixSeqWordLoop Word
wrd0 s
st0 s
fs0) =
SPEC
-> Word
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {x} {a}.
SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd0 s
st0 s
fs0
where
{-# INLINE go #-}
go :: SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go !SPEC
_ !Word
wrd !s
st !s
fs = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
case Step s a
res of
Yield a
x s
s -> do
let jump :: fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump fs
c = fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordInit fs
c s
s
wrd1 :: Word
wrd1 = Word -> a -> Word
forall {a} {a}. (Bits a, Num a, Enum a) => a -> a -> a
addToWord Word
wrd a
x
old :: Word
old = (Word
wordMask Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wrd)
Word -> Int -> Word
forall a. Bits a => a -> Int -> a
`shiftR` (Int
elemBits Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
patLen Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
Step s b
r <-
if Bool
withSep
then s -> a -> m (Step s b)
fstep s
fs a
x
else s -> a -> m (Step s b)
fstep s
fs (Int -> a
forall a. Enum a => Int -> a
toEnum (Int -> a) -> Int -> a
forall a b. (a -> b) -> a -> b
$ Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
old)
case Step s b
r of
FL.Partial s
fs1 ->
if Word
wrd1 Word -> Word -> Word
forall a. Bits a => a -> a -> a
.&. Word
wordMask Word -> Word -> Bool
forall a. Eq a => a -> a -> Bool
== Word
wordPat
then s -> m b
final s
fs1 m b
-> (b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x)
-> b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump
else SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd1 s
s s
fs1
FL.Done b
b -> (s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x)
-> b
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall {fs} {mba} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> Word
-> s
-> s
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
go SPEC
SPEC Word
wrd s
s s
fs
Step s a
Stop ->
if Bool
withSep
then do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
else SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a))
-> SplitOnSuffixSeqState mba rb rh ck Word s s b x
-> m (Step (SplitOnSuffixSeqState mba rb rh ck Word s s b x) a)
forall a b. (a -> b) -> a -> b
$ Int -> s -> Word -> SplitOnSuffixSeqState mba rb rh ck Word s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> w -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqWordDone Int
patLen s
fs Word
wrd
stepOuter State StreamK m a
gst (SplitOnSuffixSeqKRInit s
fs s
st0 MutByteArray
mba) = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st0
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
0 MutByteArray
mba a
x
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs a
x else Step s b -> m (Step s b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step s b -> m (Step s b)) -> Step s b -> m (Step s b)
forall a b. (a -> b) -> a -> b
$ s -> Step s b
forall s b. s -> Step s b
FL.Partial s
fs
case Step s b
r of
FL.Partial s
fs1 ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit1 s
fs1 s
s MutByteArray
mba
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = fs
-> s
-> MutByteArray
-> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit fs
c s
s MutByteArray
mba
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump b
b
Skip s
s -> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit s
fs s
s MutByteArray
mba
Step s a
Stop -> s -> m b
final s
fs m b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b
forall s a. Step s a
Stop
stepOuter State StreamK m a
gst (SplitOnSuffixSeqKRInit1 s
fs0 s
st0 MutByteArray
mba) = do
SPEC
-> Int
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {rh} {a} {w} {x} {a}.
Num rh =>
SPEC
-> Int
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
go SPEC
SPEC (SIZE_OF(a)) st0 fs0
where
go :: SPEC
-> Int
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
go !SPEC
_ !Int
offset s
st !s
fs = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
let Array a
arr :: Array a = Array
{ arrContents :: MutByteArray
arrContents = MutByteArray
mba
, arrStart :: Int
arrStart = Int
0
, arrEnd :: Int
arrEnd = Int
patBytes
}
case Step s a
res of
Yield a
x s
s -> do
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Int -> MutByteArray -> a -> IO ()
forall a. Unbox a => Int -> MutByteArray -> a -> IO ()
pokeAt Int
offset MutByteArray
mba a
x
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs a
x else Step s b -> m (Step s b)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step s b -> m (Step s b)) -> Step s b -> m (Step s b)
forall a b. (a -> b) -> a -> b
$ s -> Step s b
forall s b. s -> Step s b
FL.Partial s
fs
let ringHash :: Word32
ringHash = (Word32 -> a -> Word32) -> Word32 -> Array a -> Word32
forall a b. Unbox a => (b -> a -> b) -> b -> Array a -> b
A.foldl' Word32 -> a -> Word32
forall {a}. Enum a => Word32 -> a -> Word32
addCksum Word32
0 Array a
arr
case Step s b
r of
FL.Partial s
fs1
| Int
offset Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
maxOffset ->
SPEC
-> Int
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
go SPEC
SPEC (Int
offset Int -> Int -> Int
forall a. Num a => a -> a -> a
+ SIZE_OF(a)) s fs1
| Word32
ringHash Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
patHash ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> rh
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall mba rb rh ck w fs s b x.
fs
-> s -> mba -> rh -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRCheck s
fs1 s
s MutByteArray
mba rh
0
| Bool
otherwise ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> rh
-> Word32
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall mba rb rh ck w fs s b x.
fs
-> s
-> mba
-> rh
-> ck
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRLoop
s
fs1 s
s MutByteArray
mba rh
0 Word32
ringHash
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = fs
-> s
-> MutByteArray
-> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit fs
c s
s MutByteArray
mba
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> Int
-> s
-> s
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
go SPEC
SPEC Int
offset s
s s
fs
Step s a
Stop -> do
if Int
offset Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
maxOffset Bool -> Bool -> Bool
&& Array a -> Array a -> Bool
forall a. Array a -> Array a -> Bool
A.byteEq Array a
arr Array a
patArr
then s -> m b
final s
fs m b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a b. m a -> m b -> m b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a
forall s a. Step s a
Stop
else if Bool
withSep
then do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
else do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
offset
, ringHead :: Int
ringHead = Int
0
}
in SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) rh Word32 w s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRDone Int
offset s
fs RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
gst (SplitOnSuffixSeqKRLoop s
fs0 s
st0 MutByteArray
mba Int
rh0 Word32
cksum0) =
SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {ck} {w} {x} {a}.
SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
go SPEC
SPEC s
fs0 s
st0 Int
rh0 Word32
cksum0
where
go :: SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
go !SPEC
_ !s
fs !s
st !Int
rh !Word32
cksum = do
Step s a
res <- State StreamK m a -> s -> m (Step s a)
step (State StreamK m a -> State StreamK m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a (n :: * -> *) b.
State t m a -> State t n b
adaptState State StreamK m a
gst) s
st
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
case Step s a
res of
Yield a
x s
s -> do
(RingArray a
rb1, a
old) <- IO (RingArray a, a) -> m (RingArray a, a)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (RingArray a -> a -> IO (RingArray a, a)
forall (m :: * -> *) a.
(MonadIO m, Unbox a) =>
RingArray a -> a -> m (RingArray a, a)
RB.replace RingArray a
forall {a}. RingArray a
rb a
x)
let cksum1 :: Word32
cksum1 = Word32 -> a -> a -> Word32
forall {a} {a}. (Enum a, Enum a) => Word32 -> a -> a -> Word32
deltaCksum Word32
cksum a
old a
x
let rh1 :: Int
rh1 = RingArray a -> Int
forall a. RingArray a -> Int
ringHead RingArray a
rb1
Step s b
r <- if Bool
withSep then s -> a -> m (Step s b)
fstep s
fs a
x else s -> a -> m (Step s b)
fstep s
fs a
old
case Step s b
r of
FL.Partial s
fs1 ->
if Word32
cksum1 Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
/= Word32
patHash
then SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
go SPEC
SPEC s
fs1 s
s Int
rh1 Word32
cksum1
else SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
fs
-> s -> mba -> rh -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRCheck s
fs1 s
s MutByteArray
mba Int
rh1
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = fs
-> s
-> MutByteArray
-> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit fs
c s
s MutByteArray
mba
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x)
-> b
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump b
b
Skip s
s -> SPEC
-> s
-> s
-> Int
-> Word32
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
go SPEC
SPEC s
fs s
s Int
rh Word32
cksum
Step s a
Stop -> do
if Bool
withSep
then do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
else SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
-> m (Step
(SplitOnSuffixSeqState MutByteArray (RingArray a) Int ck w s s b x)
a)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int ck w s s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRDone Int
patBytes s
fs RingArray a
forall {a}. RingArray a
rb
stepOuter State StreamK m a
_ (SplitOnSuffixSeqKRCheck s
fs s
st MutByteArray
mba Int
rh) = do
let rb :: RingArray a
rb = RingArray
{ ringContents :: MutByteArray
ringContents = MutByteArray
mba
, ringSize :: Int
ringSize = Int
patBytes
, ringHead :: Int
ringHead = Int
rh
}
Bool
matches <- IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ RingArray a -> Array a -> IO Bool
forall a. RingArray a -> Array a -> IO Bool
RB.eqArray RingArray a
forall {a}. RingArray a
rb Array a
patArr
if Bool
matches
then do
b
r <- s -> m b
final s
fs
let jump :: fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump fs
c = fs
-> s
-> MutByteArray
-> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
forall mba rb rh ck w fs s b x.
fs -> s -> mba -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRInit fs
c s
st MutByteArray
mba
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {rb} {rh} {ck} {w} {b} {x}.
fs -> SplitOnSuffixSeqState MutByteArray rb rh ck w fs s b x
jump b
r
else SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ s
-> s
-> MutByteArray
-> Int
-> Word32
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
fs
-> s
-> mba
-> rh
-> ck
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRLoop s
fs s
st MutByteArray
mba Int
rh Word32
patHash
stepOuter State StreamK m a
_ (SplitOnSuffixSeqKRDone Int
0 s
fs RingArray a
_) = do
b
r <- s -> m b
final s
fs
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ b
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
b
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
-> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqYield b
r SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqDone
stepOuter State StreamK m a
_ (SplitOnSuffixSeqKRDone Int
len s
fs RingArray a
rb) = do
Bool -> m () -> m ()
forall a. HasCallStack => Bool -> a -> a
assert (Int
len Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0) (() -> m ()
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
a
old <- RingArray a -> m a
forall (m :: * -> *) a. (MonadIO m, Unbox a) => RingArray a -> m a
RB.unsafeGetHead RingArray a
rb
let rb1 :: RingArray a
rb1 = RingArray a -> RingArray a
forall a. Unbox a => RingArray a -> RingArray a
RB.moveForward RingArray a
rb
Step s b
r <- s -> a -> m (Step s b)
fstep s
fs a
old
case Step s b
r of
FL.Partial s
fs1 ->
SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {a} {a}. a -> m (Step a a)
skip (SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b))
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall a b. (a -> b) -> a -> b
$ Int
-> s
-> RingArray a
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRDone (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)) fs1 rb1
FL.Done b
b -> do
let jump :: fs -> SplitOnSuffixSeqState mba (RingArray a) rh ck w fs s b x
jump fs
c = Int
-> fs
-> RingArray a
-> SplitOnSuffixSeqState mba (RingArray a) rh ck w fs s b x
forall mba rb rh ck w fs s b x.
Int -> fs -> rb -> SplitOnSuffixSeqState mba rb rh ck w fs s b x
SplitOnSuffixSeqKRDone (Int
len Int -> Int -> Int
forall a. Num a => a -> a -> a
- SIZE_OF(a)) c rb1
(s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
-> b
-> m (Step
(SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a)
b)
forall {mba} {rb} {rh} {ck} {w} {s} {x} {a}.
(s -> SplitOnSuffixSeqState mba rb rh ck w s s b x)
-> b -> m (Step (SplitOnSuffixSeqState mba rb rh ck w s s b x) a)
yieldReinit s
-> SplitOnSuffixSeqState
MutByteArray (RingArray a) Int Word32 Word s s b a
forall {fs} {mba} {rh} {ck} {w} {s} {b} {x}.
fs -> SplitOnSuffixSeqState mba (RingArray a) rh ck w fs s b x
jump b
b
{-# INLINE_NORMAL splitEndBySeq #-}
splitEndBySeq
:: forall m a b. (MonadIO m, Unbox a, Enum a, Eq a)
=> Array a
-> Fold m a b
-> Stream m a
-> Stream m b
splitEndBySeq :: forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Array a -> Fold m a b -> Stream m a -> Stream m b
splitEndBySeq = Bool -> Array a -> Fold m a b -> Stream m a -> Stream m b
forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Fold m a b -> Stream m a -> Stream m b
splitOnSuffixSeq Bool
True
{-# INLINE_NORMAL splitEndBySeq_ #-}
splitEndBySeq_
:: forall m a b. (MonadIO m, Unbox a, Enum a, Eq a)
=> Array a
-> Fold m a b
-> Stream m a
-> Stream m b
splitEndBySeq_ :: forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Array a -> Fold m a b -> Stream m a -> Stream m b
splitEndBySeq_ = Bool -> Array a -> Fold m a b -> Stream m a -> Stream m b
forall (m :: * -> *) a b.
(MonadIO m, Unbox a, Enum a, Eq a) =>
Bool -> Array a -> Fold m a b -> Stream m a -> Stream m b
splitOnSuffixSeq Bool
False
{-# INLINE splitEndBySeqOneOf #-}
splitEndBySeqOneOf ::
[Array a] -> Fold m a b -> Stream m a -> Stream m b
splitEndBySeqOneOf :: forall a (m :: * -> *) b.
[Array a] -> Fold m a b -> Stream m a -> Stream m b
splitEndBySeqOneOf [Array a]
_subseq Fold m a b
_f Stream m a
_m = Stream m b
forall a. HasCallStack => a
undefined
{-# INLINE splitBeginBy_ #-}
splitBeginBy_ ::
(a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
splitBeginBy_ :: forall a (m :: * -> *) b.
(a -> Bool) -> Fold m a b -> Stream m a -> Stream m b
splitBeginBy_ a -> Bool
_predicate Fold m a b
_f = Stream m a -> Stream m b
forall a. HasCallStack => a
undefined
{-# INLINE splitSepBySeqOneOf #-}
splitSepBySeqOneOf ::
[Array a] -> Fold m a b -> Stream m a -> Stream m b
splitSepBySeqOneOf :: forall a (m :: * -> *) b.
[Array a] -> Fold m a b -> Stream m a -> Stream m b
splitSepBySeqOneOf [Array a]
_subseq Fold m a b
_f Stream m a
_m =
Stream m b
forall a. HasCallStack => a
undefined
{-# ANN type SplitState Fuse #-}
data SplitState s arr
= SplitInitial s
| SplitBuffering s arr
| SplitSplitting s arr
| SplitYielding arr (SplitState s arr)
| SplitFinishing
{-# INLINE_NORMAL splitInnerBy #-}
splitInnerBy
:: Monad m
=> (f a -> m (f a, Maybe (f a)))
-> (f a -> f a -> m (f a))
-> Stream m (f a)
-> Stream m (f a)
splitInnerBy :: forall (m :: * -> *) (f :: * -> *) a.
Monad m =>
(f a -> m (f a, Maybe (f a)))
-> (f a -> f a -> m (f a)) -> Stream m (f a) -> Stream m (f a)
splitInnerBy f a -> m (f a, Maybe (f a))
splitter f a -> f a -> m (f a)
joiner (Stream State StreamK m (f a) -> s -> m (Step s (f a))
step1 s
state1) =
(State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a)))
-> SplitState s (f a) -> Stream m (f a)
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a))
step (s -> SplitState s (f a)
forall s arr. s -> SplitState s arr
SplitInitial s
state1)
where
{-# INLINE_LATE step #-}
step :: State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a))
step State StreamK m (f a)
gst (SplitInitial s
st) = do
Step s (f a)
r <- State StreamK m (f a) -> s -> m (Step s (f a))
step1 State StreamK m (f a)
gst s
st
case Step s (f a)
r of
Yield f a
x s
s -> do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
x
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
x1)
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
x1 (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
s f a
x2))
Skip s
s -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> SplitState s (f a)
forall s arr. s -> SplitState s arr
SplitInitial s
s)
Step s (f a)
Stop -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (SplitState s (f a)) (f a)
forall s a. Step s a
Stop
step State StreamK m (f a)
gst (SplitBuffering s
st f a
buf) = do
Step s (f a)
r <- State StreamK m (f a) -> s -> m (Step s (f a))
step1 State StreamK m (f a)
gst s
st
case Step s (f a)
r of
Yield f a
x s
s -> do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
x
f a
buf' <- f a -> f a -> m (f a)
joiner f a
buf f a
x1
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
buf')
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
buf' (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
s f a
x2))
Skip s
s -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
buf)
Step s (f a)
Stop -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
buf SplitState s (f a)
forall s arr. SplitState s arr
SplitFinishing)
step State StreamK m (f a)
_ (SplitSplitting s
st f a
buf) = do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
buf
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (SplitState s (f a) -> Step (SplitState s (f a)) (f a))
-> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall a b. (a -> b) -> a -> b
$ s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
st f a
x1
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (SplitState s (f a) -> Step (SplitState s (f a)) (f a))
-> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall a b. (a -> b) -> a -> b
$ f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
x1 (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
st f a
x2)
step State StreamK m (f a)
_ (SplitYielding f a
x SplitState s (f a)
next) = Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ f a -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. a -> s -> Step s a
Yield f a
x SplitState s (f a)
next
step State StreamK m (f a)
_ SplitState s (f a)
SplitFinishing = Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (SplitState s (f a)) (f a)
forall s a. Step s a
Stop
{-# INLINE_NORMAL splitInnerBySuffix #-}
splitInnerBySuffix
:: Monad m
=> (f a -> Bool)
-> (f a -> m (f a, Maybe (f a)))
-> (f a -> f a -> m (f a))
-> Stream m (f a)
-> Stream m (f a)
splitInnerBySuffix :: forall (m :: * -> *) (f :: * -> *) a.
Monad m =>
(f a -> Bool)
-> (f a -> m (f a, Maybe (f a)))
-> (f a -> f a -> m (f a))
-> Stream m (f a)
-> Stream m (f a)
splitInnerBySuffix f a -> Bool
isEmpty f a -> m (f a, Maybe (f a))
splitter f a -> f a -> m (f a)
joiner (Stream State StreamK m (f a) -> s -> m (Step s (f a))
step1 s
state1) =
(State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a)))
-> SplitState s (f a) -> Stream m (f a)
forall (m :: * -> *) a s.
(State StreamK m a -> s -> m (Step s a)) -> s -> Stream m a
Stream State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a))
step (s -> SplitState s (f a)
forall s arr. s -> SplitState s arr
SplitInitial s
state1)
where
{-# INLINE_LATE step #-}
step :: State StreamK m (f a)
-> SplitState s (f a) -> m (Step (SplitState s (f a)) (f a))
step State StreamK m (f a)
gst (SplitInitial s
st) = do
Step s (f a)
r <- State StreamK m (f a) -> s -> m (Step s (f a))
step1 State StreamK m (f a)
gst s
st
case Step s (f a)
r of
Yield f a
x s
s -> do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
x
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
x1)
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
x1 (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
s f a
x2))
Skip s
s -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> SplitState s (f a)
forall s arr. s -> SplitState s arr
SplitInitial s
s)
Step s (f a)
Stop -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (SplitState s (f a)) (f a)
forall s a. Step s a
Stop
step State StreamK m (f a)
gst (SplitBuffering s
st f a
buf) = do
Step s (f a)
r <- State StreamK m (f a) -> s -> m (Step s (f a))
step1 State StreamK m (f a)
gst s
st
case Step s (f a)
r of
Yield f a
x s
s -> do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
x
f a
buf' <- f a -> f a -> m (f a)
joiner f a
buf f a
x1
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
buf')
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
buf' (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
s f a
x2))
Skip s
s -> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
s f a
buf)
Step s (f a)
Stop ->
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$
if f a -> Bool
isEmpty f a
buf
then Step (SplitState s (f a)) (f a)
forall s a. Step s a
Stop
else SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
buf SplitState s (f a)
forall s arr. SplitState s arr
SplitFinishing)
step State StreamK m (f a)
_ (SplitSplitting s
st f a
buf) = do
(f a
x1, Maybe (f a)
mx2) <- f a -> m (f a, Maybe (f a))
splitter f a
buf
Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ case Maybe (f a)
mx2 of
Maybe (f a)
Nothing -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (SplitState s (f a) -> Step (SplitState s (f a)) (f a))
-> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall a b. (a -> b) -> a -> b
$ s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitBuffering s
st f a
x1
Just f a
x2 -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. s -> Step s a
Skip (SplitState s (f a) -> Step (SplitState s (f a)) (f a))
-> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall a b. (a -> b) -> a -> b
$ f a -> SplitState s (f a) -> SplitState s (f a)
forall s arr. arr -> SplitState s arr -> SplitState s arr
SplitYielding f a
x1 (s -> f a -> SplitState s (f a)
forall s arr. s -> arr -> SplitState s arr
SplitSplitting s
st f a
x2)
step State StreamK m (f a)
_ (SplitYielding f a
x SplitState s (f a)
next) = Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a)))
-> Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a b. (a -> b) -> a -> b
$ f a -> SplitState s (f a) -> Step (SplitState s (f a)) (f a)
forall s a. a -> s -> Step s a
Yield f a
x SplitState s (f a)
next
step State StreamK m (f a)
_ SplitState s (f a)
SplitFinishing = Step (SplitState s (f a)) (f a)
-> m (Step (SplitState s (f a)) (f a))
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return Step (SplitState s (f a)) (f a)
forall s a. Step s a
Stop
{-# INLINE dropPrefix #-}
dropPrefix ::
Stream m a -> Stream m a -> Stream m a
dropPrefix :: forall (m :: * -> *) a. Stream m a -> Stream m a -> Stream m a
dropPrefix = String -> Stream m a -> Stream m a -> Stream m a
forall a. HasCallStack => String -> a
error String
"Not implemented yet!"
{-# INLINE dropInfix #-}
dropInfix ::
Stream m a -> Stream m a -> Stream m a
dropInfix :: forall (m :: * -> *) a. Stream m a -> Stream m a -> Stream m a
dropInfix = String -> Stream m a -> Stream m a -> Stream m a
forall a. HasCallStack => String -> a
error String
"Not implemented yet!"
{-# INLINE dropSuffix #-}
dropSuffix ::
Stream m a -> Stream m a -> Stream m a
dropSuffix :: forall (m :: * -> *) a. Stream m a -> Stream m a -> Stream m a
dropSuffix = String -> Stream m a -> Stream m a -> Stream m a
forall a. HasCallStack => String -> a
error String
"Not implemented yet!"