@@ -174,8 +174,8 @@ import Streamly.Streams.StreamKType
174-- | Detach a stream from an SVar
174-- | Detach a stream from an SVar
175{-# INLINE unShare #-}
175{-# INLINE unShare #-}
176unShare :: IsStream t => t m a -> t m a
176unShare :: IsStream t => t m a -> t m a
177−unShare x = mkStream $ \st stp sng yld ->
177+unShare x = mkStream $ \st yld sng stp ->
178− foldStream st stp sng yld x
178+ foldStream st yld sng stp x
180------------------------------------------------------------------------------
180------------------------------------------------------------------------------
181-- Construction
181-- Construction
@@ -196,7 +196,7 @@ infixr 5 `cons`
197-- @since 0.1.0
197-- @since 0.1.0
198cons :: IsStream t => a -> t m a -> t m a
198cons :: IsStream t => a -> t m a -> t m a
199−cons a r = mkStream $ \_ _ _ yld -> yld a r
199+cons a r = mkStream $ \_ yld _ _ -> yld a r
201infixr 5 .:
201infixr 5 .:
@@ -221,7 +221,7 @@ uncons m =
221 let stop = return Nothing
221 let stop = return Nothing
222 single a = return (Just (a, nil))
222 single a = return (Just (a, nil))
223 yieldk a r = return (Just (a, r))
223 yieldk a r = return (Just (a, r))
224− in foldStream defState stop single yieldk m
224+ in foldStream defState yieldk single stop m
226-------------------------------------------------------------------------------
226-------------------------------------------------------------------------------
227-- Generation
227-- Generation
@@ -231,7 +231,7 @@ uncons m =
231unfoldr :: IsStream t => (b -> Maybe (a, b)) -> b -> t m a
231unfoldr :: IsStream t => (b -> Maybe (a, b)) -> b -> t m a
232unfoldr step = go
232unfoldr step = go
234− go s = mkStream $ \_ stp _ yld ->
234+ go s = mkStream $ \_ yld _ stp ->
235 case step s of
235 case step s of
236 Nothing -> stp
236 Nothing -> stp
237 Just (a, b) -> yld a (go b)
237 Just (a, b) -> yld a (go b)
@@ -240,12 +240,12 @@ unfoldr step = go
240unfoldrM :: (IsStream t, MonadAsync m) => (b -> m (Maybe (a, b))) -> b -> t m a
240unfoldrM :: (IsStream t, MonadAsync m) => (b -> m (Maybe (a, b))) -> b -> t m a
241unfoldrM step = go
241unfoldrM step = go
243− go s = mkStream $ \st stp sng yld -> do
243+ go s = mkStream $ \st yld sng stp -> do
244 mayb <- step s
244 mayb <- step s
245 case mayb of
245 case mayb of
246 Nothing -> stp
246 Nothing -> stp
247 Just (a, b) ->
247 Just (a, b) ->
248− foldStreamShared st stp sng yld $ return a |: go b
248+ foldStreamShared st yld sng stp $ return a |: go b
250-------------------------------------------------------------------------------
250-------------------------------------------------------------------------------
251-- Special generation
251-- Special generation
@@ -320,7 +320,7 @@ foldr step acc m = go m
320 let stop = return acc
320 let stop = return acc
321 single a = return (step a acc)
321 single a = return (step a acc)
322 yieldk a r = go r >>= \b -> return (step a b)
322 yieldk a r = go r >>= \b -> return (step a b)
323− in foldStream defState stop single yieldk m1
323+ in foldStream defState yieldk single stop m1
325-- | Lazy right fold with a monadic step function.
325-- | Lazy right fold with a monadic step function.
326{-# INLINE foldrM #-}
326{-# INLINE foldrM #-}
@@ -331,7 +331,7 @@ foldrM step acc m = go m
331 let stop = return acc
331 let stop = return acc
332 single a = step a acc
332 single a = step a acc
333 yieldk a r = go r >>= step a
333 yieldk a r = go r >>= step a
334− in foldStream defState stop single yieldk m1
334+ in foldStream defState yieldk single stop m1
336{-# INLINE foldr1 #-}
336{-# INLINE foldr1 #-}
337foldr1 :: (IsStream t, Monad m) => (a -> a -> a) -> t m a -> m (Maybe a)
337foldr1 :: (IsStream t, Monad m) => (a -> a -> a) -> t m a -> m (Maybe a)
@@ -345,7 +345,7 @@ foldr1 step m = do
345 let stp = return p
345 let stp = return p
346 single a = return $ step a p
346 single a = return $ step a p
347 yieldk a r = fmap (step p) (go a r)
347 yieldk a r = fmap (step p) (go a r)
348− in foldStream defState stp single yieldk m1
348+ in foldStream defState yieldk single stp m1
350-- | Strict left fold with an extraction function. Like the standard strict
350-- | Strict left fold with an extraction function. Like the standard strict
351-- left fold, but applies a user supplied extraction function (the third
351-- left fold, but applies a user supplied extraction function (the third
@@ -372,13 +372,13 @@ foldx step begin done m = get $ go m begin
372 -- that cannot be tail call optimized. Unfolding recursion explicitly via
372 -- that cannot be tail call optimized. Unfolding recursion explicitly via
373 -- continuations is much more efficient.
373 -- continuations is much more efficient.
374 go :: t m a -> x -> t m x
374 go :: t m a -> x -> t m x
375− go m1 !acc = mkStream $ \_ _ sng yld ->
375+ go m1 !acc = mkStream $ \_ yld sng _ ->
376 let stop = sng acc
376 let stop = sng acc
377 single a = sng $ step acc a
377 single a = sng $ step acc a
378 -- XXX this is foldNonEmptyStream
378 -- XXX this is foldNonEmptyStream
379− yieldk a r = foldStream defState undefined sng yld $
379+ yieldk a r = foldStream defState yld sng undefined $
380 go r (step acc a)
380 go r (step acc a)
381− in foldStream defState stop single yieldk m1
381+ in foldStream defState yieldk single stop m1
383-- | Strict left associative fold.
383-- | Strict left associative fold.
384{-# INLINE foldl' #-}
384{-# INLINE foldl' #-}
@@ -395,7 +395,7 @@ foldxM step begin done m = go begin m
395 let stop = acc >>= done
395 let stop = acc >>= done
396 single a = acc >>= \b -> step b a >>= done
396 single a = acc >>= \b -> step b a >>= done
397 yieldk a r = acc >>= \b -> step b a >>= \x -> go (return x) r
397 yieldk a r = acc >>= \b -> step b a >>= \x -> go (return x) r
398− in foldStream defState stop single yieldk m1
398+ in foldStream defState yieldk single stop m1
400-- | Like 'foldl'' but with a monadic step function.
400-- | Like 'foldl'' but with a monadic step function.
401foldlM' :: (IsStream t, Monad m) => (b -> a -> m b) -> b -> t m a -> m b
401foldlM' :: (IsStream t, Monad m) => (b -> a -> m b) -> b -> t m a -> m b
@@ -413,7 +413,7 @@ runStream = go
413 let stop = return ()
413 let stop = return ()
414 single _ = return ()
414 single _ = return ()
415 yieldk _ r = go r
415 yieldk _ r = go r
416− in foldStream defState stop single yieldk m1
416+ in foldStream defState yieldk single stop m1
418{-# INLINE null #-}
418{-# INLINE null #-}
419null :: (IsStream t, Monad m) => t m a -> m Bool
419null :: (IsStream t, Monad m) => t m a -> m Bool
@@ -421,7 +421,7 @@ null m =
421 let stop = return True
421 let stop = return True
422 single _ = return False
422 single _ = return False
423 yieldk _ _ = return False
423 yieldk _ _ = return False
424− in foldStream defState stop single yieldk m
424+ in foldStream defState yieldk single stop m
426{-# INLINE head #-}
426{-# INLINE head #-}
427head :: (IsStream t, Monad m) => t m a -> m (Maybe a)
427head :: (IsStream t, Monad m) => t m a -> m (Maybe a)
@@ -429,7 +429,7 @@ head m =
429 let stop = return Nothing
429 let stop = return Nothing
430 single a = return (Just a)
430 single a = return (Just a)
431 yieldk a _ = return (Just a)
431 yieldk a _ = return (Just a)
432− in foldStream defState stop single yieldk m
432+ in foldStream defState yieldk single stop m
434{-# INLINE tail #-}
434{-# INLINE tail #-}
435tail :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
435tail :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
@@ -437,7 +437,7 @@ tail m =
437 let stop = return Nothing
437 let stop = return Nothing
438 single _ = return $ Just nil
438 single _ = return $ Just nil
439 yieldk _ r = return $ Just r
439 yieldk _ r = return $ Just r
440− in foldStream defState stop single yieldk m
440+ in foldStream defState yieldk single stop m
442{-# INLINE init #-}
442{-# INLINE init #-}
443init :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
443init :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
@@ -448,10 +448,10 @@ init m = go1 m
448 case r of
448 case r of
449 Nothing -> return Nothing
449 Nothing -> return Nothing
450 Just (h, t) -> return . Just $ go h t
450 Just (h, t) -> return . Just $ go h t
451− go p m1 = mkStream $ \_ stp sng yld ->
451+ go p m1 = mkStream $ \_ yld sng stp ->
452 let single _ = sng p
452 let single _ = sng p
453 yieldk a x = yld p $ go a x
453 yieldk a x = yld p $ go a x
454− in foldStream defState stp single yieldk m1
454+ in foldStream defState yieldk single stp m1
456{-# INLINE elem #-}
456{-# INLINE elem #-}
457elem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
457elem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
@@ -461,7 +461,7 @@ elem e m = go m
461 let stop = return False
461 let stop = return False
462 single a = return (a == e)
462 single a = return (a == e)
463 yieldk a r = if a == e then return True else go r
463 yieldk a r = if a == e then return True else go r
464− in foldStream defState stop single yieldk m1
464+ in foldStream defState yieldk single stop m1
466{-# INLINE notElem #-}
466{-# INLINE notElem #-}
467notElem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
467notElem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
@@ -471,7 +471,7 @@ notElem e m = go m
471 let stop = return True
471 let stop = return True
472 single a = return (a /= e)
472 single a = return (a /= e)
473 yieldk a r = if a == e then return False else go r
473 yieldk a r = if a == e then return False else go r
474− in foldStream defState stop single yieldk m1
474+ in foldStream defState yieldk single stop m1
476all :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
476all :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
477all p m = go m
477all p m = go m
@@ -481,7 +481,7 @@ all p m = go m
481 | otherwise = return False
481 | otherwise = return False
482 yieldk a r | p a = go r
482 yieldk a r | p a = go r
483 | otherwise = return False
483 | otherwise = return False
484− in foldStream defState (return True) single yieldk m1
484+ in foldStream defState yieldk single (return True) m1
486any :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
486any :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
487any p m = go m
487any p m = go m
@@ -491,7 +491,7 @@ any p m = go m
491 | otherwise = return False
491 | otherwise = return False
492 yieldk a r | p a = return True
492 yieldk a r | p a = return True
493 | otherwise = go r
493 | otherwise = go r
494− in foldStream defState (return False) single yieldk m1
494+ in foldStream defState yieldk single (return False) m1
496-- | Extract the last element of the stream, if any.
496-- | Extract the last element of the stream, if any.
497{-# INLINE last #-}
497{-# INLINE last #-}
@@ -506,7 +506,7 @@ minimum m = go Nothing m
506 let stop = return Nothing
506 let stop = return Nothing
507 single a = return (Just a)
507 single a = return (Just a)
508 yieldk a r = go (Just a) r
508 yieldk a r = go (Just a) r
509− in foldStream defState stop single yieldk m1
509+ in foldStream defState yieldk single stop m1
511 go (Just res) m1 =
511 go (Just res) m1 =
512 let stop = return (Just res)
512 let stop = return (Just res)
@@ -518,7 +518,7 @@ minimum m = go Nothing m
518 if res <= a
518 if res <= a
519 then go (Just res) r
519 then go (Just res) r
520 else go (Just a) r
520 else go (Just a) r
521− in foldStream defState stop single yieldk m1
521+ in foldStream defState yieldk single stop m1
523{-# INLINE minimumBy #-}
523{-# INLINE minimumBy #-}
@@ -530,7 +530,7 @@ minimumBy cmp m = go Nothing m
530 let stop = return Nothing
530 let stop = return Nothing
531 single a = return (Just a)
531 single a = return (Just a)
532 yieldk a r = go (Just a) r
532 yieldk a r = go (Just a) r
533− in foldStream defState stop single yieldk m1
533+ in foldStream defState yieldk single stop m1
535 go (Just res) m1 =
535 go (Just res) m1 =
536 let stop = return (Just res)
536 let stop = return (Just res)
@@ -540,7 +540,7 @@ minimumBy cmp m = go Nothing m
540 yieldk a r = case cmp res a of
540 yieldk a r = case cmp res a of
541 GT -> go (Just a) r
541 GT -> go (Just a) r
542 _ -> go (Just res) r
542 _ -> go (Just res) r
543− in foldStream defState stop single yieldk m1
543+ in foldStream defState yieldk single stop m1
545{-# INLINE maximum #-}
545{-# INLINE maximum #-}
546maximum :: (IsStream t, Monad m, Ord a) => t m a -> m (Maybe a)
546maximum :: (IsStream t, Monad m, Ord a) => t m a -> m (Maybe a)
@@ -550,7 +550,7 @@ maximum m = go Nothing m
550 let stop = return Nothing
550 let stop = return Nothing
551 single a = return (Just a)
551 single a = return (Just a)
552 yieldk a r = go (Just a) r
552 yieldk a r = go (Just a) r
553− in foldStream defState stop single yieldk m1
553+ in foldStream defState yieldk single stop m1
555 go (Just res) m1 =
555 go (Just res) m1 =
556 let stop = return (Just res)
556 let stop = return (Just res)
@@ -562,7 +562,7 @@ maximum m = go Nothing m
562 if res <= a
562 if res <= a
563 then go (Just a) r
563 then go (Just a) r
564 else go (Just res) r
564 else go (Just res) r
565− in foldStream defState stop single yieldk m1
565+ in foldStream defState yieldk single stop m1
567{-# INLINE maximumBy #-}
567{-# INLINE maximumBy #-}
568maximumBy :: (IsStream t, Monad m) => (a -> a -> Ordering) -> t m a -> m (Maybe a)
568maximumBy :: (IsStream t, Monad m) => (a -> a -> Ordering) -> t m a -> m (Maybe a)
@@ -572,7 +572,7 @@ maximumBy cmp m = go Nothing m
572 let stop = return Nothing
572 let stop = return Nothing
573 single a = return (Just a)
573 single a = return (Just a)
574 yieldk a r = go (Just a) r
574 yieldk a r = go (Just a) r
575− in foldStream defState stop single yieldk m1
575+ in foldStream defState yieldk single stop m1
577 go (Just res) m1 =
577 go (Just res) m1 =
578 let stop = return (Just res)
578 let stop = return (Just res)
@@ -582,7 +582,7 @@ maximumBy cmp m = go Nothing m
582 yieldk a r = case cmp res a of
582 yieldk a r = case cmp res a of
583 GT -> go (Just res) r
583 GT -> go (Just res) r
584 _ -> go (Just a) r
584 _ -> go (Just a) r
585− in foldStream defState stop single yieldk m1
585+ in foldStream defState yieldk single stop m1
587{-# INLINE (!!) #-}
587{-# INLINE (!!) #-}
588(!!) :: (IsStream t, Monad m) => t m a -> Int -> m (Maybe a)
588(!!) :: (IsStream t, Monad m) => t m a -> Int -> m (Maybe a)
@@ -594,7 +594,7 @@ m !! i = go i m
594 yieldk a x | n < 0 = return Nothing
594 yieldk a x | n < 0 = return Nothing
595 | n == 0 = return $ Just a
595 | n == 0 = return $ Just a
596 | otherwise = go (n - 1) x
596 | otherwise = go (n - 1) x
597− in foldStream defState (return Nothing) single yieldk m1
597+ in foldStream defState yieldk single (return Nothing) m1
599{-# INLINE lookup #-}
599{-# INLINE lookup #-}
600lookup :: (IsStream t, Monad m, Eq a) => a -> t m (a, b) -> m (Maybe b)
600lookup :: (IsStream t, Monad m, Eq a) => a -> t m (a, b) -> m (Maybe b)
@@ -605,7 +605,7 @@ lookup e m = go m
605 | otherwise = return Nothing
605 | otherwise = return Nothing
606 yieldk (a, b) x | a == e = return $ Just b
606 yieldk (a, b) x | a == e = return $ Just b
607 | otherwise = go x
607 | otherwise = go x
608− in foldStream defState (return Nothing) single yieldk m1
608+ in foldStream defState yieldk single (return Nothing) m1
610{-# INLINE findM #-}
610{-# INLINE findM #-}
611findM :: (IsStream t, Monad m) => (a -> m Bool) -> t m a -> m (Maybe a)
611findM :: (IsStream t, Monad m) => (a -> m Bool) -> t m a -> m (Maybe a)
@@ -618,7 +618,7 @@ findM p m = go m
618 yieldk a x = do
618 yieldk a x = do
620 if b then return $ Just a else go x
620 if b then return $ Just a else go x
621− in foldStream defState (return Nothing) single yieldk m1
621+ in foldStream defState yieldk single (return Nothing) m1
623{-# INLINE find #-}
623{-# INLINE find #-}
624find :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m (Maybe a)
624find :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m (Maybe a)
@@ -628,13 +628,13 @@ find p = findM (return . p)
628findIndices :: IsStream t => (a -> Bool) -> t m a -> t m Int
628findIndices :: IsStream t => (a -> Bool) -> t m a -> t m Int
629findIndices p = go 0
629findIndices p = go 0
631− go offset m1 = mkStream $ \st stp sng yld ->
631+ go offset m1 = mkStream $ \st yld sng stp ->
632 let single a | p a = sng offset
632 let single a | p a = sng offset
633 | otherwise = stp
633 | otherwise = stp
634 yieldk a x | p a = yld offset $ go (offset + 1) x
634 yieldk a x | p a = yld offset $ go (offset + 1) x
635− | otherwise = foldStream (adaptState st) stp sng yld $
635+ | otherwise = foldStream (adaptState st) yld sng stp $
636 go (offset + 1) x
636 go (offset + 1) x
637− in foldStream (adaptState st) stp single yieldk m1
637+ in foldStream (adaptState st) yieldk single stp m1
639------------------------------------------------------------------------------
639------------------------------------------------------------------------------
640-- Map and Fold
640-- Map and Fold
@@ -649,7 +649,7 @@ mapM_ f m = go m
649 let stop = return ()
649 let stop = return ()
650 single a = void (f a)
650 single a = void (f a)
651 yieldk a r = f a >> go r
651 yieldk a r = f a >> go r
652− in foldStream defState stop single yieldk m1
652+ in foldStream defState yieldk single stop m1
654------------------------------------------------------------------------------
654------------------------------------------------------------------------------
655-- Converting folds
655-- Converting folds
@@ -672,12 +672,12 @@ scanx :: IsStream t => (x -> a -> x) -> x -> (x -> b) -> t m a -> t m b
672scanx step begin done m =
672scanx step begin done m =
673 cons (done begin) $ go m begin
673 cons (done begin) $ go m begin
675− go m1 !acc = mkStream $ \st stp sng yld ->
675+ go m1 !acc = mkStream $ \st yld sng stp ->
676 let single a = sng (done $ step acc a)
676 let single a = sng (done $ step acc a)
677 yieldk a r =
677 yieldk a r =
678 let s = step acc a
678 let s = step acc a
679 in yld (done s) (go r s)
679 in yld (done s) (go r s)
680− in foldStream (adaptState st) stp single yieldk m1
680+ in foldStream (adaptState st) yieldk single stp m1
682{-# INLINE scanl' #-}
682{-# INLINE scanl' #-}
683scanl' :: IsStream t => (b -> a -> b) -> b -> t m a -> t m b
683scanl' :: IsStream t => (b -> a -> b) -> b -> t m a -> t m b
@@ -691,56 +691,55 @@ scanl' step begin = scanx step begin id
691filter :: IsStream t => (a -> Bool) -> t m a -> t m a
691filter :: IsStream t => (a -> Bool) -> t m a -> t m a
692filter p m = go m
692filter p m = go m
694− go m1 = mkStream $ \st stp sng yld ->
694+ go m1 = mkStream $ \st yld sng stp ->
695 let single a | p a = sng a
695 let single a | p a = sng a
696 | otherwise = stp
696 | otherwise = stp
697 yieldk a r | p a = yld a (go r)
697 yieldk a r | p a = yld a (go r)
698− | otherwise = foldStream st stp single yieldk r
698+ | otherwise = foldStream st yieldk single stp r
699− in foldStream st stp single yieldk m1
699+ in foldStream st yieldk single stp m1
701{-# INLINE take #-}
701{-# INLINE take #-}
702take :: IsStream t => Int -> t m a -> t m a
702take :: IsStream t => Int -> t m a -> t m a
703take n m = go n m
703take n m = go n m
705− go n1 m1 = mkStream $ \st stp sng yld ->
705+ go n1 m1 = mkStream $ \st yld sng stp ->
706 let yieldk a r = yld a (go (n1 - 1) r)
706 let yieldk a r = yld a (go (n1 - 1) r)
707 in if n1 <= 0
707 in if n1 <= 0
709− else foldStream st stp sng yieldk m1
709+ else foldStream st yieldk sng stp m1
711{-# INLINE takeWhile #-}
711{-# INLINE takeWhile #-}
712takeWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
712takeWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
713takeWhile p m = go m
713takeWhile p m = go m
715− go m1 = mkStream $ \st stp sng yld ->
715+ go m1 = mkStream $ \st yld sng stp ->
716 let single a | p a = sng a
716 let single a | p a = sng a
717 | otherwise = stp
717 | otherwise = stp
718 yieldk a r | p a = yld a (go r)
718 yieldk a r | p a = yld a (go r)
719 | otherwise = stp
719 | otherwise = stp
720− in foldStream st stp single yieldk m1
720+ in foldStream st yieldk single stp m1
722drop :: IsStream t => Int -> t m a -> t m a
722drop :: IsStream t => Int -> t m a -> t m a
723−drop n m = mkStream $ \st stp sng yld ->
723+drop n m = go n m
724− foldStream st stp sng yld $ go n m
726− go n1 m1 = mkStream $ \st stp sng yld ->
725+ go n1 m1 = mkStream $ \st yld sng stp ->
727 let single _ = stp
726 let single _ = stp
728− yieldk _ r = foldStream st stp sng yld $ go (n1 - 1) r
727+ yieldk _ r = foldStream st yld sng stp $ go (n1 - 1) r
729 -- Somehow "<=" check performs better than a ">"
728 -- Somehow "<=" check performs better than a ">"
730 in if n1 <= 0
729 in if n1 <= 0
731− then foldStream st stp sng yld m1
730+ then foldStream st yld sng stp m1
732− else foldStream st stp single yieldk m1
731+ else foldStream st yieldk single stp m1
734{-# INLINE dropWhile #-}
733{-# INLINE dropWhile #-}
735dropWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
734dropWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
736dropWhile p m = go m
735dropWhile p m = go m
738− go m1 = mkStream $ \st stp sng yld ->
737+ go m1 = mkStream $ \st yld sng stp ->
739 let single a | p a = stp
738 let single a | p a = stp
740 | otherwise = sng a
739 | otherwise = sng a
741− yieldk a r | p a = foldStream st stp single yieldk r
740+ yieldk a r | p a = foldStream st yieldk single stp r
742 | otherwise = yld a r
741 | otherwise = yld a r
743− in foldStream st stp single yieldk m1
742+ in foldStream st yieldk single stp m1
745-------------------------------------------------------------------------------
744-------------------------------------------------------------------------------
746-- Mapping
745-- Mapping
@@ -752,10 +751,10 @@ dropWhile p m = go m
752mapM :: (IsStream t, MonadAsync m) => (a -> m b) -> t m a -> t m b
751mapM :: (IsStream t, MonadAsync m) => (a -> m b) -> t m a -> t m b
753mapM f m = go m
752mapM f m = go m
755− go m1 = mkStream $ \st stp sng yld ->
754+ go m1 = mkStream $ \st yld sng stp ->
756 let single a = f a >>= sng
755 let single a = f a >>= sng
757− yieldk a r = foldStreamShared st stp sng yld $ f a |: go r
756+ yieldk a r = foldStreamShared st yld sng stp $ f a |: go r
758− in foldStream (adaptState st) stp single yieldk m1
757+ in foldStream (adaptState st) yieldk single stp m1
760-- Be careful when modifying this, this uses a consM (|:) deliberately to allow
759-- Be careful when modifying this, this uses a consM (|:) deliberately to allow
761-- other stream types to overload it.
760-- other stream types to overload it.
@@ -763,10 +762,10 @@ mapM f m = go m
763sequence :: (IsStream t, MonadAsync m) => t m (m a) -> t m a
762sequence :: (IsStream t, MonadAsync m) => t m (m a) -> t m a
764sequence m = go m
763sequence m = go m
766− go m1 = mkStream $ \st stp sng yld ->
765+ go m1 = mkStream $ \st yld sng stp ->
767 let single ma = ma >>= sng
766 let single ma = ma >>= sng
768− yieldk ma r = foldStreamShared st stp sng yld $ ma |: go r
767+ yieldk ma r = foldStreamShared st yld sng stp $ ma |: go r
769− in foldStream (adaptState st) stp single yieldk m1
768+ in foldStream (adaptState st) yieldk single stp m1
771-------------------------------------------------------------------------------
770-------------------------------------------------------------------------------
772-- Inserting
771-- Inserting
@@ -776,19 +775,19 @@ sequence m = go m
776intersperseM :: (IsStream t, MonadAsync m) => m a -> t m a -> t m a
775intersperseM :: (IsStream t, MonadAsync m) => m a -> t m a -> t m a
777intersperseM a m = prependingStart m
776intersperseM a m = prependingStart m
779− prependingStart m1 = mkStream $ \st stp sng yld ->
778+ prependingStart m1 = mkStream $ \st yld sng stp ->
780− let yieldk i x = foldStreamShared st stp sng yld $ return i |: go x
779+ let yieldk i x = foldStreamShared st yld sng stp $ return i |: go x
781− in foldStream st stp sng yieldk m1
780+ in foldStream st yieldk sng stp m1
782− go m2 = mkStream $ \st stp sng yld ->
781+ go m2 = mkStream $ \st yld sng stp ->
783− let single i = foldStreamShared st stp sng yld $ a |: yield i
782+ let single i = foldStreamShared st yld sng stp $ a |: yield i
784− yieldk i x = foldStreamShared st stp sng yld $ a |: return i |: go x
783+ yieldk i x = foldStreamShared st yld sng stp $ a |: return i |: go x
785− in foldStream st stp single yieldk m2
784+ in foldStream st yieldk single stp m2
787{-# INLINE insertBy #-}
786{-# INLINE insertBy #-}
788insertBy :: IsStream t => (a -> a -> Ordering) -> a -> t m a -> t m a
787insertBy :: IsStream t => (a -> a -> Ordering) -> a -> t m a -> t m a
789insertBy cmp x m = go m
788insertBy cmp x m = go m
791− go m1 = mkStream $ \st _ _ yld ->
790+ go m1 = mkStream $ \st yld _ _ ->
792 let single a = case cmp x a of
791 let single a = case cmp x a of
793 GT -> yld a (yield x)
792 GT -> yld a (yield x)
794 _ -> yld x (yield a)
793 _ -> yld x (yield a)
@@ -796,7 +795,7 @@ insertBy cmp x m = go m
796 yieldk a r = case cmp x a of
795 yieldk a r = case cmp x a of
797 GT -> yld a (go r)
796 GT -> yld a (go r)
798 _ -> yld x (a `cons` r)
797 _ -> yld x (a `cons` r)
799− in foldStream st stop single yieldk m1
798+ in foldStream st yieldk single stop m1
801------------------------------------------------------------------------------
800------------------------------------------------------------------------------
802-- Deleting
801-- Deleting
@@ -806,12 +805,12 @@ insertBy cmp x m = go m
806deleteBy :: IsStream t => (a -> a -> Bool) -> a -> t m a -> t m a
805deleteBy :: IsStream t => (a -> a -> Bool) -> a -> t m a -> t m a
807deleteBy eq x m = go m
806deleteBy eq x m = go m
809− go m1 = mkStream $ \st stp sng yld ->
808+ go m1 = mkStream $ \st yld sng stp ->
810 let single a = if eq x a then stp else sng a
809 let single a = if eq x a then stp else sng a
811 yieldk a r = if eq x a
810 yieldk a r = if eq x a
812− then foldStream st stp sng yld r
811+ then foldStream st yld sng stp r
813 else yld a (go r)
812 else yld a (go r)
814− in foldStream st stp single yieldk m1
813+ in foldStream st yieldk single stp m1
816-------------------------------------------------------------------------------
815-------------------------------------------------------------------------------
817-- Map and Filter
816-- Map and Filter
@@ -821,14 +820,14 @@ deleteBy eq x m = go m
821mapMaybe :: IsStream t => (a -> Maybe b) -> t m a -> t m b
820mapMaybe :: IsStream t => (a -> Maybe b) -> t m a -> t m b
822mapMaybe f m = go m
821mapMaybe f m = go m
824− go m1 = mkStream $ \st stp sng yld ->
823+ go m1 = mkStream $ \st yld sng stp ->
825 let single a = case f a of
824 let single a = case f a of
826 Just b -> sng b
825 Just b -> sng b
827 Nothing -> stp
826 Nothing -> stp
828 yieldk a r = case f a of
827 yieldk a r = case f a of
829 Just b -> yld b $ go r
828 Just b -> yld b $ go r
830− Nothing -> foldStream (adaptState st) stp single yieldk r
829+ Nothing -> foldStream (adaptState st) yieldk single stp r
831− in foldStream (adaptState st) stp single yieldk m1
830+ in foldStream (adaptState st) yieldk single stp m1
833------------------------------------------------------------------------------
832------------------------------------------------------------------------------
834-- Serial Zipping
833-- Serial Zipping
@@ -841,14 +840,14 @@ mapMaybe f m = go m
841zipWith :: IsStream t => (a -> b -> c) -> t m a -> t m b -> t m c
840zipWith :: IsStream t => (a -> b -> c) -> t m a -> t m b -> t m c
842zipWith f = go
841zipWith f = go
844− go mx my = mkStream $ \st stp sng yld -> do
843+ go mx my = mkStream $ \st yld sng stp -> do
845 let merge a ra =
844 let merge a ra =
846 let single2 b = sng (f a b)
845 let single2 b = sng (f a b)
847 yield2 b rb = yld (f a b) (go ra rb)
846 yield2 b rb = yld (f a b) (go ra rb)
848− in foldStream (adaptState st) stp single2 yield2 my
847+ in foldStream (adaptState st) yield2 single2 stp my
849 let single1 a = merge a nil
848 let single1 a = merge a nil
850 yield1 = merge
849 yield1 = merge
851− foldStream (adaptState st) stp single1 yield1 mx
850+ foldStream (adaptState st) yield1 single1 stp mx
853-- | Zip two streams serially using a monadic zipping function.
852-- | Zip two streams serially using a monadic zipping function.
@@ -856,15 +855,15 @@ zipWith f = go
856zipWithM :: (IsStream t, Monad m) => (a -> b -> m c) -> t m a -> t m b -> t m c
855zipWithM :: (IsStream t, Monad m) => (a -> b -> m c) -> t m a -> t m b -> t m c
857zipWithM f m1 m2 = go m1 m2
856zipWithM f m1 m2 = go m1 m2
859− go mx my = mkStream $ \st stp sng yld -> do
858+ go mx my = mkStream $ \st yld sng stp -> do
860 let merge a ra =
859 let merge a ra =
861− let runIt x = foldStream st stp sng yld x
860+ let runIt x = foldStream st yld sng stp x
862 single2 b = f a b >>= sng
861 single2 b = f a b >>= sng
863 yield2 b rb = f a b >>= \x -> runIt (x `cons` go ra rb)
862 yield2 b rb = f a b >>= \x -> runIt (x `cons` go ra rb)
864− in foldStream (adaptState st) stp single2 yield2 my
863+ in foldStream (adaptState st) yield2 single2 stp my
865 let single1 a = merge a nil
864 let single1 a = merge a nil
866 yield1 = merge
865 yield1 = merge
867− foldStream (adaptState st) stp single1 yield1 mx
866+ foldStream (adaptState st) yield1 single1 stp mx
869------------------------------------------------------------------------------
868------------------------------------------------------------------------------
870-- Merging
869-- Merging
@@ -876,9 +875,9 @@ mergeByM
876 => (a -> a -> m Ordering) -> t m a -> t m a -> t m a
875 => (a -> a -> m Ordering) -> t m a -> t m a -> t m a
877mergeByM cmp = go
876mergeByM cmp = go
879− go mx my = mkStream $ \st stp sng yld -> do
878+ go mx my = mkStream $ \st yld sng stp -> do
880 let mergeWithY a ra =
879 let mergeWithY a ra =
881− let stop2 = foldStream st stp sng yld mx
880+ let stop2 = foldStream st yld sng stp mx
882 single2 b = do
881 single2 b = do
883 r <- cmp a b
882 r <- cmp a b
884 case r of
883 case r of
@@ -889,11 +888,11 @@ mergeByM cmp = go
889 case r of
888 case r of
890 GT -> yld b (go (a `cons` ra) rb)
889 GT -> yld b (go (a `cons` ra) rb)
891 _ -> yld a (go ra (b `cons` rb))
890 _ -> yld a (go ra (b `cons` rb))
892− in foldStream st stop2 single2 yield2 my
891+ in foldStream st yield2 single2 stop2 my
893− let stopX = foldStream st stp sng yld my
892+ let stopX = foldStream st yld sng stp my
894 singleX a = mergeWithY a nil
893 singleX a = mergeWithY a nil
895 yieldX = mergeWithY
894 yieldX = mergeWithY
896− foldStream st stopX singleX yieldX mx
895+ foldStream st yieldX singleX stopX mx
898{-# INLINABLE mergeBy #-}
897{-# INLINABLE mergeBy #-}
@@ -918,7 +917,7 @@ the m = do
918 | otherwise = return Nothing
917 | otherwise = return Nothing
919 yieldk a r | h == a = go h r
918 yieldk a r | h == a = go h r
920 | otherwise = return Nothing
919 | otherwise = return Nothing
921− in foldStream defState (return $ Just h) single yieldk m1
920+ in foldStream defState yieldk single (return $ Just h) m1
923-------------------------------------------------------------------------------
922-------------------------------------------------------------------------------
924-- Bind utility
923-- Bind utility
@@ -934,20 +933,20 @@ bindWith
934bindWith par m1 f = go m1
933bindWith par m1 f = go m1
937− mkStream $ \st stp sng yld ->
936+ mkStream $ \st yld sng stp ->
938− let foldShared = foldStreamShared st stp sng yld
937+ let foldShared = foldStreamShared st yld sng stp
939 single a = foldShared $ unShare (f a)
938 single a = foldShared $ unShare (f a)
940 yieldk a r = foldShared $ unShare (f a) `par` go r
939 yieldk a r = foldShared $ unShare (f a) `par` go r
941− in foldStream (adaptState st) stp single yieldk m
940+ in foldStream (adaptState st) yieldk single stp m
943------------------------------------------------------------------------------
942------------------------------------------------------------------------------
944-- Alternative & MonadPlus
943-- Alternative & MonadPlus
945------------------------------------------------------------------------------
944------------------------------------------------------------------------------
947_alt :: Stream m a -> Stream m a -> Stream m a
946_alt :: Stream m a -> Stream m a -> Stream m a
948−_alt m1 m2 = mkStream $ \st stp sng yld ->
947+_alt m1 m2 = mkStream $ \st yld sng stp ->
949− let stop = foldStream st stp sng yld m2
948+ let stop = foldStream st yld sng stp m2
950− in foldStream st stop sng yld m1
949+ in foldStream st yld sng stop m1
952------------------------------------------------------------------------------
951------------------------------------------------------------------------------
953-- MonadReader
952-- MonadReader
@@ -955,10 +954,10 @@ _alt m1 m2 = mkStream $ \st stp sng yld ->
956withLocal :: MonadReader r m => (r -> r) -> Stream m a -> Stream m a
955withLocal :: MonadReader r m => (r -> r) -> Stream m a -> Stream m a
957withLocal f m =
956withLocal f m =
958− mkStream $ \st stp sng yld ->
957+ mkStream $ \st yld sng stp ->
959 let single = local f . sng
958 let single = local f . sng
960 yieldk a r = local f $ yld a (withLocal f r)
959 yieldk a r = local f $ yld a (withLocal f r)
961− in foldStream st (local f stp) single yieldk m
960+ in foldStream st yieldk single (local f stp) m
963------------------------------------------------------------------------------
962------------------------------------------------------------------------------
964-- MonadError
963-- MonadError