@@ -254,6 +254,7 @@ composeN' n f =
254 _ -> undefined
254 _ -> undefined
256{-# INLINE scan #-}
256{-# INLINE scan #-}
257+{-# INLINE scanl1 #-}
257{-# INLINE map #-}
258{-# INLINE map #-}
258{-# INLINE fmap #-}
259{-# INLINE fmap #-}
259{-# INLINE mapMaybe #-}
260{-# INLINE mapMaybe #-}
@@ -271,7 +272,7 @@ composeN' n f =
271{-# INLINE dropWhileFalse #-}
272{-# INLINE dropWhileFalse #-}
272{-# INLINE findIndices #-}
273{-# INLINE findIndices #-}
273{-# INLINE elemIndices #-}
274{-# INLINE elemIndices #-}
274−scan, map, fmap, mapMaybe, filterEven, filterAllOut,
275+scan, scanl1, map, fmap, mapMaybe, filterEven, filterAllOut,
275 filterAllIn, takeOne, takeAll, takeWhileTrue, takeWhileMTrue, dropOne,
276 filterAllIn, takeOne, takeAll, takeWhileTrue, takeWhileMTrue, dropOne,
276 dropAll, dropWhileTrue, dropWhileMTrue, dropWhileFalse,
277 dropAll, dropWhileTrue, dropWhileMTrue, dropWhileFalse,
277 findIndices, elemIndices
278 findIndices, elemIndices
@@ -290,6 +291,7 @@ sequence :: (S.IsStream t, S.MonadAsync m)
290 => (t m Int -> S.SerialT m Int) -> t m (m Int) -> m ()
291 => (t m Int -> S.SerialT m Int) -> t m (m Int) -> m ()
292scan n = composeN n $ S.scanl' (+) 0
293scan n = composeN n $ S.scanl' (+) 0
294+scanl1 n = composeN n $ S.scanl1' (+)
293fmap n = composeN n $ Prelude.fmap (+1)
295fmap n = composeN n $ Prelude.fmap (+1)
294map n = composeN n $ S.map (+1)
296map n = composeN n $ S.map (+1)
295mapM t n = composeN' n $ t . S.mapM return
297mapM t n = composeN' n $ t . S.mapM return
@@ -332,18 +334,21 @@ iterateSource g i n = f i (sourceUnfoldrMN iterStreamLen n)
333{-# INLINE iterateMapM #-}
335{-# INLINE iterateMapM #-}
334{-# INLINE iterateScan #-}
336{-# INLINE iterateScan #-}
337+{-# INLINE iterateScanl1 #-}
335{-# INLINE iterateFilterEven #-}
338{-# INLINE iterateFilterEven #-}
336{-# INLINE iterateTakeAll #-}
339{-# INLINE iterateTakeAll #-}
337{-# INLINE iterateDropOne #-}
340{-# INLINE iterateDropOne #-}
338{-# INLINE iterateDropWhileFalse #-}
341{-# INLINE iterateDropWhileFalse #-}
339{-# INLINE iterateDropWhileTrue #-}
342{-# INLINE iterateDropWhileTrue #-}
340−iterateMapM, iterateScan, iterateFilterEven, iterateTakeAll, iterateDropOne,
343+iterateMapM, iterateScan, iterateScanl1, iterateFilterEven, iterateTakeAll,
341− iterateDropWhileFalse, iterateDropWhileTrue
344+ iterateDropOne, iterateDropWhileFalse, iterateDropWhileTrue
342 :: S.MonadAsync m
345 :: S.MonadAsync m
343 => Int -> Stream m Int
346 => Int -> Stream m Int
345-- this is quadratic
348-- this is quadratic
346iterateScan = iterateSource (S.scanl' (+) 0) (maxIters `div` 10)
349iterateScan = iterateSource (S.scanl' (+) 0) (maxIters `div` 10)
351+iterateScanl1 = iterateSource (S.scanl1' (+)) (maxIters `div` 10)
348iterateMapM = iterateSource (S.mapM return) maxIters
353iterateMapM = iterateSource (S.mapM return) maxIters
349iterateFilterEven = iterateSource (S.filter even) maxIters
354iterateFilterEven = iterateSource (S.filter even) maxIters
@@ -412,9 +417,10 @@ cmpBy src = S.cmpBy P.compare src src
412{-# INLINE filterDrop #-}
417{-# INLINE filterDrop #-}
413{-# INLINE filterTake #-}
418{-# INLINE filterTake #-}
414{-# INLINE filterScan #-}
419{-# INLINE filterScan #-}
420+{-# INLINE filterScanl1 #-}
415{-# INLINE filterMap #-}
421{-# INLINE filterMap #-}
416scanMap, dropMap, dropScan, takeDrop, takeScan, takeMap, filterDrop,
422scanMap, dropMap, dropScan, takeDrop, takeScan, takeMap, filterDrop,
417− filterTake, filterScan, filterMap
423+ filterTake, filterScan, filterScanl1, filterMap
418 :: Monad m => Int -> Stream m Int -> m ()
424 :: Monad m => Int -> Stream m Int -> m ()
420scanMap n = composeN n $ S.map (subtract 1) . S.scanl' (+) 0
426scanMap n = composeN n $ S.map (subtract 1) . S.scanl' (+) 0
@@ -426,6 +432,7 @@ takeMap n = composeN n $ S.map (subtract 1) . S.take maxValue
426filterDrop n = composeN n $ S.drop 1 . S.filter (<= maxValue)
432filterDrop n = composeN n $ S.drop 1 . S.filter (<= maxValue)
427filterTake n = composeN n $ S.take maxValue . S.filter (<= maxValue)
433filterTake n = composeN n $ S.take maxValue . S.filter (<= maxValue)
428filterScan n = composeN n $ S.scanl' (+) 0 . S.filter (<= maxBound)
434filterScan n = composeN n $ S.scanl' (+) 0 . S.filter (<= maxBound)
435+filterScanl1 n = composeN n $ S.scanl1' (+) . S.filter (<= maxBound)
429filterMap n = composeN n $ S.map (subtract 1) . S.filter (<= maxValue)
436filterMap n = composeN n $ S.map (subtract 1) . S.filter (<= maxValue)
431-------------------------------------------------------------------------------
438-------------------------------------------------------------------------------