@@ -23,6 +23,8 @@ module Asyncly.AsyncT
27-- , makeAsync
29-- , makeAsync
@@ -122,6 +124,19 @@ instance Monad m => Monoid (AsyncT m a) where
122 yield a c (Just r) = yld a c (Just (mappend r m2))
124 yield a c (Just r) = yld a c (Just (mappend r m2))
123 in m1 ctx stop yield
125 in m1 ctx stop yield
127+-- | interleaves the results of two AsyncT computations
128+interleave :: AsyncT m a -> AsyncT m a -> AsyncT m a
129+interleave m1 m2 = AsyncT $ \ctx stp yld -> do
130+ let stop = (runAsyncT m2) ctx stp yld
131+ yield a c Nothing = yld a c (Just m2)
132+ yield a c (Just r) = yld a c (Just (interleave m2 r))
133+ (runAsyncT m1) ctx stop yield
137+(<=>) :: AsyncT m a -> AsyncT m a -> AsyncT m a
125-- We do not use bind for parallelism. That is, we do not start each iteration
140-- We do not use bind for parallelism. That is, we do not start each iteration
126-- of the list in parallel. That will introduce too much uncontrolled
141-- of the list in parallel. That will introduce too much uncontrolled
127-- parallelism. Instead we control parallelism using <|>, it is used for
142-- parallelism. Instead we control parallelism using <|>, it is used for