on master help sign in
Use bindWith to implement all the binds
commitc175cddef501f67ac3977c1c1839123ef9ce05cd authorHarendra Kumar <harendra.kumar@gmail.com> dateWed 26 Dec 2018, 16:59 (8 years ago) parent0a2755a
2 files changed+4−38
src/Streamly/Streams/Ahead.hs+2−19 src/Streamly/Streams/Serial.hs+2−19
src/Streamly/Streams/Ahead.hs+2−19
@@ -49,7 +49,7 @@ import Streamly.Streams.Serial (map)
4949import Streamly.SVar
5050import Streamly.Streams.StreamK
5151 (IsStream(..), Stream, mkStream, foldStream, foldStreamShared,
52− foldStreamSVar, unShare)
52+ foldStreamSVar)
5353import qualified Streamly.Streams.StreamK as K
5454
5555import Prelude hiding (map)
@@ -677,26 +677,9 @@ instance MonadAsync m => Monoid (AheadT m a) where
677677-- Monad
678678------------------------------------------------------------------------------
679679
680−-- XXX use bindWith instead
681−
682−{-# INLINE aheadbind #-}
683−aheadbind
684− :: MonadAsync m
685− => Stream m a
686− -> (a -> Stream m b)
687− -> Stream m b
688−aheadbind m f = go m
689− where
690− go g =
691− mkStream $ \st yld sng stp ->
692− let foldShared = foldStreamShared st yld sng stp
693− single a = foldShared $ unShare (f a)
694− yieldk a r = foldShared $ unShare (f a) `ahead` go r
695− in foldStream (adaptState st) yieldk single stp g
696−
697680instance MonadAsync m => Monad (AheadT m) where
698681 return = pure
699− (AheadT m) >>= f = AheadT $ aheadbind m (getAheadT . f)
682+ (>>=) = K.bindWith ahead
700683
701684------------------------------------------------------------------------------
702685-- Other instances
src/Streamly/Streams/Serial.hs+2−19
@@ -60,7 +60,6 @@ import Text.Read (Lexeme(Ident), lexP, parens, prec, readPrec, readListPrec,
6060 readListPrecDefault)
6161import Prelude hiding (map, mapM)
6262
63−import Streamly.SVar (adaptState)
6463import Streamly.Streams.StreamK (IsStream(..), adapt, Stream, mkStream,
6564 foldStream)
6665import qualified Streamly.Streams.Prelude as P
@@ -168,17 +167,9 @@ instance IsStream SerialT where
168167-- Monad
169168------------------------------------------------------------------------------
170169
171−-- XXX if foldStreamShared/unShare/adaptState are not efficient in serial case
172−-- we can use a rewrite rule for that for the serial case and then just use a
173−-- bindWith serial here.
174−--
175170instance Monad m => Monad (SerialT m) where
176171 return = pure
177− m >>= f = mkStream $ \st yld sng stp ->
178− let run x = foldStream st yld sng stp x
179− single a = run $ f a
180− yieldk a r = run $ f a <> (r >>= f)
181− in foldStream (adaptState st) yieldk single stp m
172+ (>>=) = K.bindWith K.serial
182173
183174------------------------------------------------------------------------------
184175-- Other instances
@@ -331,17 +322,9 @@ instance Monoid (WSerialT m a) where
331322-- Monad
332323------------------------------------------------------------------------------
333324
334−-- XXX if foldStreamShared/unShare/adaptState are not efficient in serial case
335−-- we can use a rewrite rule for that for the serial case and then just use a
336−-- bindWith interleave here.
337−--
338325instance Monad m => Monad (WSerialT m) where
339326 return = pure
340− m >>= f = mkStream $ \st yld sng stp ->
341− let run x = foldStream st yld sng stp x
342− single a = run $ f a
343− yieldk a r = run $ f a <> (r >>= f)
344− in foldStream (adaptState st) yieldk single stp m
327+ (>>=) = K.bindWith wSerial
345328
346329------------------------------------------------------------------------------
347330-- Other instances