@@ -20,11 +20,16 @@ main :: IO ()
2020main = do
2121 defaultMain [
2222 bgroup "basic"
23− [ bench "asyncly (<>)" $ nfIO (asyncly_basic (A.<>))
24− , bench "asyncly (<=>)" $ nfIO (asyncly_basic (A.<=>))
25− , bench "asyncly (<|)" $ nfIO (asyncly_basic (A.<|))
26− , bench "asyncly (<|>)" $ nfIO (asyncly_basic (A.<|>))
23+ [ bench "asyncly-serial" $ nfIO (asyncly_basic (A.<>))
24+ , bench "asyncly-interleaved" $ nfIO (asyncly_basic (A.<=>))
25+ , bench "asyncly-parleft" $ nfIO (asyncly_basic (A.<|))
26+ , bench "asyncly-parinterleaved" $ nfIO (asyncly_basic (A.<|>))
27+ , bench "asyncly-serial-nil" $ nfIO (asyncly_nil (A.<>))
28+ , bench "asyncly-interleaved-nil" $ nfIO (asyncly_nil (A.<=>))
29+ , bench "asyncly-parleft-nil" $ nfIO (asyncly_nil (A.<|))
30+ , bench "asyncly-parinterleaved-nil" $ nfIO (asyncly_nil (A.<|>))
2731 , bench "transient" $ nfIO transient_basic
32+ , bench "transient-nil" $ nfIO transient_nil
2833 , bench "logict" $ nfIO logict_basic
2934 , bench "list-t" $ nfIO list_t_basic
3035 , bench "machines" $ nfIO machines_basic
@@ -74,6 +79,13 @@ transient_basic = T.keep' $ T.threads 0 $ do
7479 assert (Prelude.length xs == 49900) $
7580 T.exit (Prelude.length xs)
7681
82+transient_nil :: IO (Maybe Int)
83+transient_nil = T.keep' $ T.threads 0 $ do
84+ xs <- T.group 49900 $ do
85+ T.choose [1..100000 :: Int]
86+ assert (Prelude.length xs == 49900) $
87+ T.exit (Prelude.length xs)
88+
7789amap :: (Int -> Int) -> Int -> A.AsyncT IO Int
7890amap = Main.map
7991
@@ -99,6 +111,16 @@ asyncly_basic f = do
99111 assert (Prelude.length xs == 49900) $
100112 return (Prelude.length xs)
101113
114+{-# INLINE asyncly_nil #-}
115+asyncly_nil :: (A.AsyncT IO Int -> A.AsyncT IO Int -> A.AsyncT IO Int)
116+ -> IO Int
117+asyncly_nil f = do
118+ xs <- A.toList $ do
119+ (A.forEachWith f [1..100000:: Int] $
120+ \x -> return x >>= return . id)
121+ assert (Prelude.length xs == 100000) $
122+ return (Prelude.length xs)
123+
102124lfilter :: (Int -> Bool) -> Int -> LT.ListT IO Int
103125lfilter = Main.filter
104126