@@ -6,6 +6,7 @@
6-- Maintainer : streamly@composewell.com
6-- Maintainer : streamly@composewell.com
8{-# LANGUAGE FlexibleContexts #-}
8{-# LANGUAGE FlexibleContexts #-}
9+{-# LANGUAGE ScopedTypeVariables #-}
9{-# OPTIONS_GHC -fspec-constr-recursive=4 #-}
10{-# OPTIONS_GHC -fspec-constr-recursive=4 #-}
11module Main
12module Main
@@ -17,6 +18,7 @@ import Control.DeepSeq (NFData(..))
17import Control.Monad.Catch (MonadCatch, MonadThrow)
18import Control.Monad.Catch (MonadCatch, MonadThrow)
18import Data.Foldable (asum)
19import Data.Foldable (asum)
19import Data.Functor (($>))
20import Data.Functor (($>))
21+import Data.Maybe (fromMaybe)
20import System.Random (randomRIO)
22import System.Random (randomRIO)
21import Prelude hiding (any, all, take, sequence, sequenceA, takeWhile)
23import Prelude hiding (any, all, take, sequence, sequenceA, takeWhile)
@@ -64,8 +66,11 @@ drainWhile :: MonadThrow m => (a -> Bool) -> PR.Parser m a ()
64drainWhile p = PR.takeWhile p FL.drain
66drainWhile p = PR.takeWhile p FL.drain
66{-# INLINE sliceBeginWith #-}
68{-# INLINE sliceBeginWith #-}
67−sliceBeginWith :: MonadCatch m => Int -> SerialT m Int -> m()
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
68−sliceBeginWith value = IP.parseD (PR.sliceBeginWith (>= value) FL.drain)
73+ IP.parseD (PR.sliceBeginWith (== value) FL.drain) stream2
70{-# INLINE takeWhile #-}
75{-# INLINE takeWhile #-}
71takeWhile :: MonadThrow m => Int -> SerialT m Int -> m ()
76takeWhile :: MonadThrow m => Int -> SerialT m Int -> m ()