@@ -134,13 +134,18 @@ fromStream :: Int -> Int -> IO ()
134fromStream size start =
134fromStream size start =
135 drainGeneration UF.fromStream (S.replicate size start :: S.SerialT IO Int)
135 drainGeneration UF.fromStream (S.replicate size start :: S.SerialT IO Int)
137+-- XXX INVESTIGATE: Although the performance of this should be equivalant to
138+-- fromStream, this is considerably worse. More than 4x worse.
137{-# INLINE fromStreamK #-}
139{-# INLINE fromStreamK #-}
138fromStreamK :: Monad m => Int -> Int -> m ()
140fromStreamK :: Monad m => Int -> Int -> m ()
139fromStreamK size start = drainGeneration UF.fromStreamK (K.replicate size start)
141fromStreamK size start = drainGeneration UF.fromStreamK (K.replicate size start)
141−{-# INLINE fromStreamD #-}
143+-- XXX INVESTIGATE: This either takes too long or is in an infinite loop, either
144+-- way see whats going on.
145+{-# INLINE _fromStreamD #-}
142−fromStreamD :: Monad m => Int -> Int -> m ()
146+_fromStreamD :: Monad m => Int -> Int -> m ()
147+_fromStreamD size start =
143−fromStreamD size start = drainGeneration UF.fromStreamD (D.replicate size start)
148+ drainGeneration UF.fromStreamD (D.replicate size start)
145{-# INLINE _nilM #-}
150{-# INLINE _nilM #-}
146_nilM :: Monad m => Int -> Int -> m ()
151_nilM :: Monad m => Int -> Int -> m ()
@@ -209,16 +214,6 @@ replicateM size start = drainGeneration (UF.replicateM size) (return start)
209repeatM :: Monad m => Int -> Int -> m ()
214repeatM :: Monad m => Int -> Int -> m ()
210repeatM size start = drainGeneration (UF.take size UF.repeatM) (return start)
215repeatM size start = drainGeneration (UF.take size UF.repeatM) (return start)
212−{-# INLINE enumerateFromStepIntegral #-}
213−enumerateFromStepIntegral :: Monad m => Int -> Int -> m ()
214−enumerateFromStepIntegral size start =
215− drainGeneration (UF.take size UF.enumerateFromStepIntegral) (start, 1)
217−{-# INLINE enumerateFromToIntegral #-}
218−enumerateFromToIntegral :: Monad m => Int -> Int -> m ()
219−enumerateFromToIntegral size start =
220− drainGeneration (UF.enumerateFromToIntegral (size + start)) start
222{-# INLINE iterateM #-}
217{-# INLINE iterateM #-}
223iterateM :: Monad m => Int -> Int -> m ()
218iterateM :: Monad m => Int -> Int -> m ()
224iterateM size start =
219iterateM size start =
@@ -229,6 +224,16 @@ fromIndicesM :: Monad m => Int -> Int -> m ()
229fromIndicesM size start =
224fromIndicesM size start =
230 drainGeneration (UF.take size (UF.fromIndicesM return)) start
225 drainGeneration (UF.take size (UF.fromIndicesM return)) start
227+{-# INLINE enumerateFromStepIntegral #-}
228+enumerateFromStepIntegral :: Monad m => Int -> Int -> m ()
229+enumerateFromStepIntegral size start =
230+ drainGeneration (UF.take size UF.enumerateFromStepIntegral) (start, 1)
232+{-# INLINE enumerateFromToIntegral #-}
233+enumerateFromToIntegral :: Monad m => Int -> Int -> m ()
234+enumerateFromToIntegral size start =
235+ drainGeneration (UF.enumerateFromToIntegral (size + start)) start
232{-# INLINE enumerateFromIntegral #-}
237{-# INLINE enumerateFromIntegral #-}
233enumerateFromIntegral :: Monad m => Int -> Int -> m ()
238enumerateFromIntegral :: Monad m => Int -> Int -> m ()
234enumerateFromIntegral size start =
239enumerateFromIntegral size start =
@@ -285,7 +290,6 @@ filter :: Monad m => Int -> Int -> m ()
285filter size start =
290filter size start =
286 drainTransformationDefault size (UF.filter (\_ -> True)) start
291 drainTransformationDefault size (UF.filter (\_ -> True)) start
289{-# INLINE filterM #-}
293{-# INLINE filterM #-}
290filterM :: Monad m => Int -> Int -> m ()
294filterM :: Monad m => Int -> Int -> m ()
291filterM size start =
295filterM size start =
@@ -422,7 +426,8 @@ o_1_space_generation_resource size =
422 "generation/resource"
426 "generation/resource"
423 [ benchIO "fromStream" $ fromStream size
427 [ benchIO "fromStream" $ fromStream size
424 , benchIO "fromStreamK" $ fromStreamK size
428 , benchIO "fromStreamK" $ fromStreamK size
429+ -- XXX INVESTIGATE, see the definition
425− , benchIO "fromStreamD" $ fromStreamD size
430+ -- , benchIO "fromStreamD" $ fromStreamD size
426 -- Very small benchmarks, reporting in ns
431 -- Very small benchmarks, reporting in ns
427 -- , benchIO "nilM" $ nilM size
432 -- , benchIO "nilM" $ nilM size
428 , benchIO "consM" $ consM size
433 , benchIO "consM" $ consM size