@@ -85,6 +85,7 @@ main = do
8585 , bench "logict" $ nfIO logict_basic
8686 , bench "list-t" $ nfIO list_t_basic
8787 , bench "simple-conduit" $ nfIO simple_conduit_basic
88+ , bench "simple-conduit-bind" $ nfIO simple_conduit_bind
8889 , bench "machines" $ nfIO machines_basic
8990 ]
9091#endif
@@ -270,6 +271,23 @@ simple_conduit_basic = do
270271 assert (Prelude.length xs == 49900) $
271272 return (Prelude.length (xs :: [Int]))
272273
274+smap :: Monad (s IO) => (Int -> Int) -> Int -> s IO Int
275+smap = Main.map
276+
277+sfilter :: (Alternative (s IO), Monad (s IO)) => (Int -> Bool) -> Int -> s IO Int
278+sfilter = Main.filter
279+
280+{-# INLINE simple_conduit_bind #-}
281+simple_conduit_bind :: IO Int
282+simple_conduit_bind = do
283+ xs <- S.sinkList $ do
284+ S.dropC 100 (S.sourceList [1..100000 :: Int] >>= \x ->
285+ sfilter even x >>= smap (+1))
286+ >>= smap (+1)
287+ >>= sfilter (\y -> y `mod` 2 == 0)
288+ assert (Prelude.length xs == 49900) $
289+ return (Prelude.length xs)
290+
273291machines_basic :: IO Int
274292machines_basic = do
275293 xs <- M.runT $ M.source [1..100000]