@@ -32,8 +32,8 @@ module Streamly.Streams.StreamK
3232 , adapt
3333
3434 -- * The stream type
35− , Stream (..)
36− , unStreamIsolated
35+ , Stream
36+ , unStream
3737 , isolateStream
3838 , unStreamShared
3939 , runStreamSVar
@@ -196,32 +196,28 @@ import Streamly.SVar
196196-- for Applicative and Monad, and in 'lift' for MonadTrans.
197197--
198198newtype Stream m a =
199− Stream {
200− unStream :: forall r.
199+ Stream (forall r.
201200 State Stream m a -- state
202201 -> m r -- stop
203202 -> (a -> m r) -- singleton
204203 -> (a -> Stream m a -> m r) -- yield
205204 -> m r
206− }
205+ )
207206
208−-- XXX make this the default "unStream"
209−-- | unwraps the Stream type producing the stream function that can be run with
210−-- continuations.
211−{-# INLINE unStreamIsolated #-}
212−unStreamIsolated ::
207+{-# INLINE unStream #-}
208+unStream ::
213209 Stream m a
214− -> State Stream m a -- state
210+ -> State Stream m b -- state
215211 -> m r -- stop
216212 -> (a -> m r) -- singleton
217213 -> (a -> Stream m a -> m r) -- yield
218214 -> m r
219−unStreamIsolated x st = unStream x (rstState st)
215+unStream (Stream runner) st = runner (rstState st)
220216
221217{-# INLINE isolateStream #-}
222218isolateStream :: Stream m a -> Stream m a
223219isolateStream x = Stream $ \st stp sng yld ->
224− unStreamIsolated x st stp sng yld
220+ unStream x st stp sng yld
225221
226222-- | Like unstream, but passes a shared SVar across continuations.
227223{-# INLINE unStreamShared #-}
@@ -232,7 +228,7 @@ unStreamShared ::
232228 -> (a -> m r) -- singleton
233229 -> (a -> Stream m a -> m r) -- yield
234230 -> m r
235−unStreamShared = unStream
231+unStreamShared (Stream runner) st stp sng yld = runner st stp sng yld
236232
237233-- Run the stream using a run function associated with the SVar that runs the
238234-- streams with a captured snapshot of the monadic state.
@@ -248,7 +244,7 @@ runStreamSVar
248244 -> m ()
249245runStreamSVar sv m st stp sng yld =
250246 let mrun = runInIO $ svarMrun sv
251− in void $ liftIO $ mrun $ unStream m st stp sng yld
247+ in void $ liftIO $ mrun $ unStreamShared m st stp sng yld
252248
253249------------------------------------------------------------------------------
254250-- Types that can behave as a Stream
@@ -332,7 +328,7 @@ mkStream:: IsStream t
332328 -> t m a
333329mkStream k = fromStream $ Stream $ \st stp sng yld ->
334330 let yieldk a r = yld a (toStream r)
335− in k (rstState st) stp sng yieldk
331+ in k st stp sng yieldk
336332
337333------------------------------------------------------------------------------
338334-- Construction
@@ -430,7 +426,7 @@ uncons m =
430426 let stop = return Nothing
431427 single a = return (Just (a, nil))
432428 yieldk a r = return (Just (a, fromStream r))
433− in unStream (toStream m) defState stop single yieldk
429+ in unStreamShared (toStream m) defState stop single yieldk
434430
435431-------------------------------------------------------------------------------
436432-- Generation
@@ -454,7 +450,7 @@ unfoldrM step = go
454450 case mayb of
455451 Nothing -> stp
456452 Just (a, b) ->
457− unStream (toStream (return a |: go b)) svr stp sng yld
453+ unStreamShared (toStream (return a |: go b)) svr stp sng yld
458454
459455-------------------------------------------------------------------------------
460456-- Special generation
@@ -537,7 +533,7 @@ foldStream
537533 -> m r
538534foldStream st blank single step m =
539535 let yieldk a x = step a (fromStream x)
540− in unStream (toStream m) st blank single yieldk
536+ in unStreamShared (toStream m) st blank single yieldk
541537
542538-- | Lazy right associative fold.
543539foldr :: (IsStream t, Monad m) => (a -> b -> b) -> b -> t m a -> m b
@@ -547,7 +543,7 @@ foldr step acc m = go (toStream m)
547543 let stop = return acc
548544 single a = return (step a acc)
549545 yieldk a r = go r >>= \b -> return (step a b)
550− in unStream m1 defState stop single yieldk
546+ in unStreamShared m1 defState stop single yieldk
551547
552548-- | Lazy right fold with a monadic step function.
553549{-# INLINE foldrM #-}
@@ -558,7 +554,7 @@ foldrM step acc m = go (toStream m)
558554 let stop = return acc
559555 single a = step a acc
560556 yieldk a r = go r >>= step a
561− in unStream m1 defState stop single yieldk
557+ in unStreamShared m1 defState stop single yieldk
562558
563559{-# INLINE foldr1 #-}
564560foldr1 :: (IsStream t, Monad m) => (a -> a -> a) -> t m a -> m (Maybe a)
@@ -572,7 +568,7 @@ foldr1 step m = do
572568 let stp = return p
573569 single a = return $ step a p
574570 yieldk a r = fmap (step p) (go a r)
575− in unStream m1 defState stp single yieldk
571+ in unStreamShared m1 defState stp single yieldk
576572
577573-- | Strict left fold with an extraction function. Like the standard strict
578574-- left fold, but applies a user supplied extraction function (the third
@@ -590,7 +586,7 @@ foldx step begin done m = get $ go (toStream m) begin
590586 -- XXX we are not strictly evaluating the accumulator here. Is this
591587 -- okay?
592588 let single = return . done
593− in unStream m1 undefined undefined single undefined
589+ in unStreamShared m1 undefined undefined single undefined
594590
595591 -- Note, this can be implemented by making a recursive call to "go",
596592 -- however that is more expensive because of unnecessary recursion
@@ -601,8 +597,8 @@ foldx step begin done m = get $ go (toStream m) begin
601597 single a = sng $ step acc a
602598 yieldk a r =
603599 let stream = go r (step acc a)
604− in unStream stream defState undefined sng yld
605− in unStream m1 defState stop single yieldk
600+ in unStreamShared stream defState undefined sng yld
601+ in unStreamShared m1 defState stop single yieldk
606602
607603-- | Strict left associative fold.
608604{-# INLINE foldl' #-}
@@ -619,7 +615,7 @@ foldxM step begin done m = go begin (toStream m)
619615 let stop = acc >>= done
620616 single a = acc >>= \b -> step b a >>= done
621617 yieldk a r = acc >>= \b -> step b a >>= \x -> go (return x) r
622− in unStream m1 defState stop single yieldk
618+ in unStreamShared m1 defState stop single yieldk
623619
624620-- | Like 'foldl'' but with a monadic step function.
625621foldlM' :: (IsStream t, Monad m) => (b -> a -> m b) -> b -> t m a -> m b
@@ -637,7 +633,7 @@ runStream m = go (toStream m)
637633 let stop = return ()
638634 single _ = return ()
639635 yieldk _ r = go (toStream r)
640− in unStream m1 defState stop single yieldk
636+ in unStreamShared m1 defState stop single yieldk
641637
642638{-# INLINE null #-}
643639null :: (IsStream t, Monad m) => t m a -> m Bool
@@ -645,7 +641,7 @@ null m =
645641 let stop = return True
646642 single _ = return False
647643 yieldk _ _ = return False
648− in unStream (toStream m) defState stop single yieldk
644+ in unStreamShared (toStream m) defState stop single yieldk
649645
650646{-# INLINE head #-}
651647head :: (IsStream t, Monad m) => t m a -> m (Maybe a)
@@ -653,7 +649,7 @@ head m =
653649 let stop = return Nothing
654650 single a = return (Just a)
655651 yieldk a _ = return (Just a)
656− in unStream (toStream m) defState stop single yieldk
652+ in unStreamShared (toStream m) defState stop single yieldk
657653
658654{-# INLINE tail #-}
659655tail :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
@@ -661,7 +657,7 @@ tail m =
661657 let stop = return Nothing
662658 single _ = return $ Just nil
663659 yieldk _ r = return $ Just $ fromStream r
664− in unStream (toStream m) defState stop single yieldk
660+ in unStreamShared (toStream m) defState stop single yieldk
665661
666662{-# INLINE init #-}
667663init :: (IsStream t, Monad m) => t m a -> m (Maybe (t m a))
@@ -675,7 +671,7 @@ init m = go1 (toStream m)
675671 go p m1 = Stream $ \_ stp sng yld ->
676672 let single _ = sng p
677673 yieldk a x = yld p $ go a x
678− in unStream m1 defState stp single yieldk
674+ in unStreamShared m1 defState stp single yieldk
679675
680676{-# INLINE elem #-}
681677elem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
@@ -685,7 +681,7 @@ elem e m = go (toStream m)
685681 let stop = return False
686682 single a = return (a == e)
687683 yieldk a r = if a == e then return True else go r
688− in unStream m1 defState stop single yieldk
684+ in unStreamShared m1 defState stop single yieldk
689685
690686{-# INLINE notElem #-}
691687notElem :: (IsStream t, Monad m, Eq a) => a -> t m a -> m Bool
@@ -695,7 +691,7 @@ notElem e m = go (toStream m)
695691 let stop = return True
696692 single a = return (a /= e)
697693 yieldk a r = if a == e then return False else go r
698− in unStream m1 defState stop single yieldk
694+ in unStreamShared m1 defState stop single yieldk
699695
700696all :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
701697all p m = go (toStream m)
@@ -705,7 +701,7 @@ all p m = go (toStream m)
705701 | otherwise = return False
706702 yieldk a r | p a = go r
707703 | otherwise = return False
708− in unStream m1 defState (return True) single yieldk
704+ in unStreamShared m1 defState (return True) single yieldk
709705
710706any :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m Bool
711707any p m = go (toStream m)
@@ -715,7 +711,7 @@ any p m = go (toStream m)
715711 | otherwise = return False
716712 yieldk a r | p a = return True
717713 | otherwise = go r
718− in unStream m1 defState (return False) single yieldk
714+ in unStreamShared m1 defState (return False) single yieldk
719715
720716-- | Extract the last element of the stream, if any.
721717{-# INLINE last #-}
@@ -730,7 +726,7 @@ minimum m = go Nothing (toStream m)
730726 let stop = return Nothing
731727 single a = return (Just a)
732728 yieldk a r = go (Just a) r
733− in unStream m1 defState stop single yieldk
729+ in unStreamShared m1 defState stop single yieldk
734730
735731 go (Just res) m1 =
736732 let stop = return (Just res)
@@ -742,7 +738,7 @@ minimum m = go Nothing (toStream m)
742738 if res <= a
743739 then go (Just res) r
744740 else go (Just a) r
745− in unStream m1 defState stop single yieldk
741+ in unStreamShared m1 defState stop single yieldk
746742
747743{-# INLINE minimumBy #-}
748744minimumBy
@@ -754,7 +750,7 @@ minimumBy cmp m = go Nothing (toStream m)
754750 let stop = return Nothing
755751 single a = return (Just a)
756752 yieldk a r = go (Just a) r
757− in unStream m1 defState stop single yieldk
753+ in unStreamShared m1 defState stop single yieldk
758754
759755 go (Just res) m1 =
760756 let stop = return (Just res)
@@ -764,7 +760,7 @@ minimumBy cmp m = go Nothing (toStream m)
764760 yieldk a r = case cmp res a of
765761 GT -> go (Just a) r
766762 _ -> go (Just res) r
767− in unStream m1 defState stop single yieldk
763+ in unStreamShared m1 defState stop single yieldk
768764
769765{-# INLINE maximum #-}
770766maximum :: (IsStream t, Monad m, Ord a) => t m a -> m (Maybe a)
@@ -774,7 +770,7 @@ maximum m = go Nothing (toStream m)
774770 let stop = return Nothing
775771 single a = return (Just a)
776772 yieldk a r = go (Just a) r
777− in unStream m1 defState stop single yieldk
773+ in unStreamShared m1 defState stop single yieldk
778774
779775 go (Just res) m1 =
780776 let stop = return (Just res)
@@ -786,7 +782,7 @@ maximum m = go Nothing (toStream m)
786782 if res <= a
787783 then go (Just a) r
788784 else go (Just res) r
789− in unStream m1 defState stop single yieldk
785+ in unStreamShared m1 defState stop single yieldk
790786
791787{-# INLINE maximumBy #-}
792788maximumBy :: (IsStream t, Monad m) => (a -> a -> Ordering) -> t m a -> m (Maybe a)
@@ -796,7 +792,7 @@ maximumBy cmp m = go Nothing (toStream m)
796792 let stop = return Nothing
797793 single a = return (Just a)
798794 yieldk a r = go (Just a) r
799− in unStream m1 defState stop single yieldk
795+ in unStreamShared m1 defState stop single yieldk
800796
801797 go (Just res) m1 =
802798 let stop = return (Just res)
@@ -806,7 +802,7 @@ maximumBy cmp m = go Nothing (toStream m)
806802 yieldk a r = case cmp res a of
807803 GT -> go (Just res) r
808804 _ -> go (Just a) r
809− in unStream m1 defState stop single yieldk
805+ in unStreamShared m1 defState stop single yieldk
810806
811807{-# INLINE (!!) #-}
812808(!!) :: (IsStream t, Monad m) => t m a -> Int -> m (Maybe a)
@@ -818,7 +814,7 @@ m !! i = go i (toStream m)
818814 yieldk a x | n < 0 = return Nothing
819815 | n == 0 = return $ Just a
820816 | otherwise = go (n - 1) x
821− in unStream m1 defState (return Nothing) single yieldk
817+ in unStreamShared m1 defState (return Nothing) single yieldk
822818
823819{-# INLINE lookup #-}
824820lookup :: (IsStream t, Monad m, Eq a) => a -> t m (a, b) -> m (Maybe b)
@@ -829,7 +825,7 @@ lookup e m = go (toStream m)
829825 | otherwise = return Nothing
830826 yieldk (a, b) x | a == e = return $ Just b
831827 | otherwise = go x
832− in unStream m1 defState (return Nothing) single yieldk
828+ in unStreamShared m1 defState (return Nothing) single yieldk
833829
834830{-# INLINE findM #-}
835831findM :: (IsStream t, Monad m) => (a -> m Bool) -> t m a -> m (Maybe a)
@@ -842,7 +838,7 @@ findM p m = go (toStream m)
842838 yieldk a x = do
843839 b <- p a
844840 if b then return $ Just a else go x
845− in unStream m1 defState (return Nothing) single yieldk
841+ in unStreamShared m1 defState (return Nothing) single yieldk
846842
847843{-# INLINE find #-}
848844find :: (IsStream t, Monad m) => (a -> Bool) -> t m a -> m (Maybe a)
@@ -857,7 +853,7 @@ findIndices p = fromStream . go 0 . toStream
857853 | otherwise = stp
858854 yieldk a x | p a = yld offset $ go (offset + 1) x
859855 | otherwise = unStream (go (offset + 1) x) st stp sng yld
860− in unStream m1 (rstState st) stp single yieldk
856+ in unStream m1 st stp single yieldk
861857
862858------------------------------------------------------------------------------
863859-- Map and Fold
@@ -872,7 +868,7 @@ mapM_ f m = go (toStream m)
872868 let stop = return ()
873869 single a = void (f a)
874870 yieldk a r = f a >> go r
875− in unStream m1 defState stop single yieldk
871+ in unStreamShared m1 defState stop single yieldk
876872
877873------------------------------------------------------------------------------
878874-- Converting folds
@@ -900,7 +896,7 @@ scanx step begin done m =
900896 yieldk a r =
901897 let s = step acc a
902898 in yld (done s) (go r s)
903− in unStream m1 (rstState st) stp single yieldk
899+ in unStream m1 st stp single yieldk
904900
905901{-# INLINE scanl' #-}
906902scanl' :: IsStream t => (b -> a -> b) -> b -> t m a -> t m b
@@ -918,8 +914,8 @@ filter p m = fromStream $ go (toStream m)
918914 let single a | p a = sng a
919915 | otherwise = stp
920916 yieldk a r | p a = yld a (go r)
921− | otherwise = unStream r (rstState st) stp single yieldk
922− in unStream m1 (rstState st) stp single yieldk
917+ | otherwise = unStream r st stp single yieldk
918+ in unStream m1 st stp single yieldk
923919
924920{-# INLINE take #-}
925921take :: IsStream t => Int -> t m a -> t m a
@@ -929,7 +925,7 @@ take n m = fromStream $ go n (toStream m)
929925 let yieldk a r = yld a (go (n1 - 1) r)
930926 in if n1 <= 0
931927 then stp
932− else unStream m1 (rstState st) stp sng yieldk
928+ else unStream m1 st stp sng yieldk
933929
934930{-# INLINE takeWhile #-}
935931takeWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
@@ -940,7 +936,7 @@ takeWhile p m = fromStream $ go (toStream m)
940936 | otherwise = stp
941937 yieldk a r | p a = yld a (go r)
942938 | otherwise = stp
943− in unStream m1 (rstState st) stp single yieldk
939+ in unStream m1 st stp single yieldk
944940
945941drop :: IsStream t => Int -> t m a -> t m a
946942drop n m = fromStream $ Stream $ \st stp sng yld ->
@@ -951,8 +947,8 @@ drop n m = fromStream $ Stream $ \st stp sng yld ->
951947 yieldk _ r = (unStream $ go (n1 - 1) r) st stp sng yld
952948 -- Somehow "<=" check performs better than a ">"
953949 in if n1 <= 0
954− then unStream m1 st stp sng yld
955− else unStream m1 st stp single yieldk
950+ then unStreamShared m1 st stp sng yld
951+ else unStreamShared m1 st stp single yieldk
956952
957953{-# INLINE dropWhile #-}
958954dropWhile :: IsStream t => (a -> Bool) -> t m a -> t m a
@@ -961,9 +957,9 @@ dropWhile p m = fromStream $ go (toStream m)
961957 go m1 = Stream $ \st stp sng yld ->
962958 let single a | p a = stp
963959 | otherwise = sng a
964− yieldk a r | p a = unStream r (rstState st) stp single yieldk
960+ yieldk a r | p a = unStream r st stp single yieldk
965961 | otherwise = yld a r
966− in unStream m1 (rstState st) stp single yieldk
962+ in unStream m1 st stp single yieldk
967963
968964-------------------------------------------------------------------------------
969965-- Mapping
@@ -974,7 +970,7 @@ map :: (IsStream t, Monad m) => (a -> b) -> t m a -> t m b
974970map f m = fromStream $ Stream $ \st stp sng yld ->
975971 let single = sng . f
976972 yieldk a r = yld (f a) (fmap f r)
977− in unStream (toStream m) (rstState st) stp single yieldk
973+ in unStream (toStream m) st stp single yieldk
978974
979975-- Be careful when modifying this, this uses a consM (|:) deliberately to allow
980976-- other stream types to overload it.
@@ -984,8 +980,8 @@ mapM f m = go (toStream m)
984980 where
985981 go m1 = fromStream $ Stream $ \st stp sng yld ->
986982 let single a = f a >>= sng
987− yieldk a r = unStream (toStream (f a |: go r)) st stp sng yld
988− in unStream m1 (rstState st) stp single yieldk
983+ yieldk a r = unStreamShared (toStream (f a |: go r)) st stp sng yld
984+ in unStream m1 st stp single yieldk
989985
990986-- Be careful when modifying this, this uses a consM (|:) deliberately to allow
991987-- other stream types to overload it.
@@ -995,8 +991,8 @@ sequence m = go (toStream m)
995991 where
996992 go m1 = fromStream $ Stream $ \st stp sng yld ->
997993 let single ma = ma >>= sng
998− yieldk ma r = unStream (toStream $ ma |: go r) st stp sng yld
999− in unStream m1 (rstState st) stp single yieldk
994+ yieldk ma r = unStreamShared (toStream $ ma |: go r) st stp sng yld
995+ in unStream m1 st stp single yieldk
1000996
1001997-------------------------------------------------------------------------------
1002998-- Inserting
@@ -1007,12 +1003,12 @@ intersperseM :: (IsStream t, MonadAsync m) => m a -> t m a -> t m a
10071003intersperseM a m = fromStream $ prependingStart (toStream m)
10081004 where
10091005 prependingStart m1 = Stream $ \st stp sng yld ->
1010− let yieldk i x = unStream (return i |: go x) st stp sng yld
1011− in unStream m1 (rstState st) stp sng yieldk
1006+ let yieldk i x = unStreamShared (return i |: go x) st stp sng yld
1007+ in unStream m1 st stp sng yieldk
10121008 go m2 = fromStream $ Stream $ \st stp sng yld ->
1013− let single i = unStream (a |: yield i) st stp sng yld
1014− yieldk i x = unStream (a |: return i |: go x) st stp sng yld
1015− in unStream m2 (rstState st) stp single yieldk
1009+ let single i = unStreamShared (a |: yield i) st stp sng yld
1010+ yieldk i x = unStreamShared (a |: return i |: go x) st stp sng yld
1011+ in unStream m2 st stp single yieldk
10161012
10171013{-# INLINE insertBy #-}
10181014insertBy :: IsStream t => (a -> a -> Ordering) -> a -> t m a -> t m a
@@ -1026,7 +1022,7 @@ insertBy cmp x m = fromStream $ go (toStream m)
10261022 yieldk a r = case cmp x a of
10271023 GT -> yld a (go r)
10281024 _ -> yld x (a `cons` r)
1029− in unStream m1 (rstState st) stop single yieldk
1025+ in unStream m1 st stop single yieldk
10301026
10311027------------------------------------------------------------------------------
10321028-- Deleting
@@ -1039,9 +1035,9 @@ deleteBy eq x m = fromStream $ go (toStream m)
10391035 go m1 = Stream $ \st stp sng yld ->
10401036 let single a = if eq x a then stp else sng a
10411037 yieldk a r = if eq x a
1042− then unStream r (rstState st) stp sng yld
1038+ then unStream r st stp sng yld
10431039 else yld a (go r)
1044− in unStream m1 (rstState st) stp single yieldk
1040+ in unStream m1 st stp single yieldk
10451041
10461042-------------------------------------------------------------------------------
10471043-- Map and Filter
@@ -1057,8 +1053,8 @@ mapMaybe f m = go (toStream m)
10571053 Nothing -> stp
10581054 yieldk a r = case f a of
10591055 Just b -> yld b (toStream $ go r)
1060− Nothing -> unStream r (rstState st) stp single yieldk
1061− in unStream m1 (rstState st) stp single yieldk
1056+ Nothing -> unStream r st stp single yieldk
1057+ in unStream m1 st stp single yieldk
10621058
10631059------------------------------------------------------------------------------
10641060-- Serial Zipping
@@ -1072,10 +1068,10 @@ zipWithS f = go
10721068 let merge a ra =
10731069 let single2 b = sng (f a b)
10741070 yield2 b rb = yld (f a b) (go ra rb)
1075− in unStream my (rstState st) stp single2 yield2
1071+ in unStream my st stp single2 yield2
10761072 let single1 a = merge a nil
10771073 yield1 = merge
1078− unStream mx (rstState st) stp single1 yield1
1074+ unStream mx st stp single1 yield1
10791075
10801076-- | Zip two streams serially using a pure zipping function.
10811077--
@@ -1092,13 +1088,13 @@ zipWithM f m1 m2 = fromStream $ go (toStream m1) (toStream m2)
10921088 where
10931089 go mx my = Stream $ \st stp sng yld -> do
10941090 let merge a ra =
1095− let runIt x = unStream x (rstState st) stp sng yld
1091+ let runIt x = unStream x st stp sng yld
10961092 single2 b = f a b >>= sng
10971093 yield2 b rb = f a b >>= \x -> runIt (x `cons` go ra rb)
1098− in unStream my (rstState st) stp single2 yield2
1094+ in unStream my st stp single2 yield2
10991095 let single1 a = merge a nil
11001096 yield1 = merge
1101− unStream mx (rstState st) stp single1 yield1
1097+ unStream mx st stp single1 yield1
11021098
11031099------------------------------------------------------------------------------
11041100-- Merging
@@ -1158,7 +1154,7 @@ the m = do
11581154 | otherwise = return Nothing
11591155 yieldk a r | h == a = go h r
11601156 | otherwise = return Nothing
1161− in unStream m1 defState (return $ Just h) single yieldk
1157+ in unStreamShared m1 defState (return $ Just h) single yieldk
11621158
11631159------------------------------------------------------------------------------
11641160-- Semigroup
@@ -1171,7 +1167,7 @@ serial :: Stream m a -> Stream m a -> Stream m a
11711167serial m1 m2 = go m1
11721168 where
11731169 go (Stream m) = Stream $ \st stp sng yld ->
1174− let stop = unStream m2 (rstState st) stp sng yld
1170+ let stop = unStream m2 st stp sng yld
11751171 single a = yld a m2
11761172 yieldk a r = yld a (go r)
11771173 in m (rstState st) stop single yieldk
@@ -1209,7 +1205,7 @@ bindWith par m f = go m
12091205 go (Stream g) =
12101206 Stream $ \st stp sng yld ->
12111207 let runShared x = unStreamShared x st stp sng yld
1212− runIsolated x = unStreamIsolated x st stp sng yld
1208+ runIsolated x = unStream x st stp sng yld
12131209
12141210 single a = runIsolated $ f a
12151211 yieldk a r = runShared $ isolateStream (f a) `par` go r
@@ -1221,8 +1217,8 @@ bindWith par m f = go m
12211217
12221218_alt :: Stream m a -> Stream m a -> Stream m a
12231219_alt m1 m2 = Stream $ \st stp sng yld ->
1224− let stop = unStream m2 (rstState st) stp sng yld
1225− in unStream m1 (rstState st) stop sng yld
1220+ let stop = unStream m2 st stp sng yld
1221+ in unStream m1 st stop sng yld
12261222
12271223------------------------------------------------------------------------------
12281224-- MonadReader
@@ -1233,7 +1229,7 @@ withLocal f m =
12331229 Stream $ \st stp sng yld ->
12341230 let single = local f . sng
12351231 yieldk a r = local f $ yld a (withLocal f r)
1236− in unStream m (rstState st) (local f stp) single yieldk
1232+ in unStream m st (local f stp) single yieldk
12371233
12381234------------------------------------------------------------------------------
12391235-- MonadError