@@ -24,7 +24,9 @@ import Control.Monad (when)
2424import Data.Maybe (isJust)
2525import System.Random (randomRIO)
2626import Prelude hiding
27− (tail, mapM_, foldl, last, map, mapM, concatMap, zipWith, init)
27+ ( tail, mapM_, foldl, last, map, mapM, concatMap, zipWith, init, iterate
28+ , repeat, replicate
29+ )
2830
2931import qualified Prelude as P
3032import qualified Data.List as List
@@ -44,12 +46,6 @@ import Test.Inspection
4446
4547Benchmarks that need to be added
4648
47−-- repeat
48−-- repeatM
49−-- replicate
50−-- replicateM
51−-- iterate
52−-- iterateM
5349-- fromList
5450
5551-- bindWith
@@ -138,6 +134,30 @@ unfoldrM streamLen n = S.unfoldrM step n
138134 then return Nothing
139135 else return (Just (cnt, cnt + 1))
140136
137+{-# INLINE repeat #-}
138+repeat :: Int -> Int -> Stream m Int
139+repeat streamLen = S.take streamLen . S.repeat
140+
141+{-# INLINE repeatM #-}
142+repeatM :: S.MonadAsync m => Int -> Int -> Stream m Int
143+repeatM streamLen = S.take streamLen . S.repeatM . return
144+
145+{-# INLINE replicate #-}
146+replicate :: Int -> Int -> Stream m Int
147+replicate = S.replicate
148+
149+{-# INLINE replicateM #-}
150+replicateM :: S.MonadAsync m => Int -> Int -> Stream m Int
151+replicateM streamLen = S.replicateM streamLen . return
152+
153+{-# INLINE iterate #-}
154+iterate :: Int -> Int -> Stream m Int
155+iterate streamLen = S.take streamLen . S.iterate (+1)
156+
157+{-# INLINE iterateM #-}
158+iterateM :: S.MonadAsync m => Int -> Int -> Stream m Int
159+iterateM streamLen = S.take streamLen . S.iterateM (return . (+1)) . return
160+
141161{-# INLINE fromFoldable #-}
142162fromFoldable :: Int -> Int -> Stream m Int
143163fromFoldable streamLen n = S.fromFoldable [n..n+streamLen]
@@ -570,8 +590,14 @@ moduleName = "Data.Stream.StreamK"
570590o_1_space_generation :: Int -> Benchmark
571591o_1_space_generation streamLen =
572592 bgroup "generation"
573− [ benchFold "unfoldr" drain (unfoldr streamLen)
574− , benchFold "unfoldrM" drain (unfoldrM streamLen)
593+ [ benchFold "unfoldr" drain (unfoldr streamLen)
594+ , benchFold "unfoldrM" drain (unfoldrM streamLen)
595+ , benchFold "repeat" drain (repeat streamLen)
596+ , benchFold "repeatM" drain (repeatM streamLen)
597+ , benchFold "replicate" drain (replicate streamLen)
598+ , benchFold "replicateM" drain (replicateM streamLen)
599+ , benchFold "iterate" drain (iterate streamLen)
600+ , benchFold "iterateM" drain (iterateM streamLen)
575601
576602 , benchFold "fromFoldable" drain (fromFoldable streamLen)
577603 , benchFold "fromFoldableM" drain (fromFoldableM streamLen)