@@ -6,6 +6,7 @@
66-- Maintainer : streamly@composewell.com
77
88{-# LANGUAGE FlexibleContexts #-}
9+{-# LANGUAGE ScopedTypeVariables #-}
910{-# OPTIONS_GHC -fspec-constr-recursive=4 #-}
1011
1112module Main
@@ -17,6 +18,7 @@ import Control.DeepSeq (NFData(..))
1718import Control.Monad.Catch (MonadCatch, MonadThrow)
1819import Data.Foldable (asum)
1920import Data.Functor (($>))
21+import Data.Maybe (fromMaybe)
2022import System.Random (randomRIO)
2123import Prelude hiding (any, all, take, sequence, sequenceA, takeWhile)
2224
@@ -64,8 +66,11 @@ drainWhile :: MonadThrow m => (a -> Bool) -> PR.Parser m a ()
6466drainWhile p = PR.takeWhile p FL.drain
6567
6668{-# INLINE sliceBeginWith #-}
67−sliceBeginWith :: MonadCatch m => Int -> SerialT m Int -> m()
68−sliceBeginWith value = IP.parseD (PR.sliceBeginWith (>= value) FL.drain)
69+sliceBeginWith :: MonadCatch m => Int -> SerialT m Int -> m ()
70+sliceBeginWith value stream = do
71+ stream1 <- return . fromMaybe (S.yield (value + 1)) =<< S.tail stream
72+ let stream2 = value `S.cons` stream1
73+ IP.parseD (PR.sliceBeginWith (== value) FL.drain) stream2
6974
7075{-# INLINE takeWhile #-}
7176takeWhile :: MonadThrow m => Int -> SerialT m Int -> m ()