@@ -19,7 +19,8 @@ import Data.Maybe (fromJust)
19import Prelude
19import Prelude
20 (Monad, Int, (+), ($), (.), return, fmap, even, (>), (<=), (==), (>=),
20 (Monad, Int, (+), ($), (.), return, fmap, even, (>), (<=), (==), (>=),
21 subtract, undefined, Maybe(..), odd, Bool, not, (>>=), mapM_, curry,
21 subtract, undefined, Maybe(..), odd, Bool, not, (>>=), mapM_, curry,
22− maxBound, div, IO, compare, Double, fromIntegral, Integer, (<$>), (<*>))
22+ maxBound, div, IO, compare, Double, fromIntegral, Integer, (<$>),
23import qualified Prelude as P
24import qualified Prelude as P
24import qualified Data.Foldable as F
25import qualified Data.Foldable as F
25import qualified GHC.Exts as GHC
26import qualified GHC.Exts as GHC
@@ -170,22 +171,32 @@ toList :: Monad m => Stream m Int -> m [Int]
170{-# INLINE find #-}
171{-# INLINE find #-}
171{-# INLINE findIndex #-}
172{-# INLINE findIndex #-}
172{-# INLINE elemIndex #-}
173{-# INLINE elemIndex #-}
173−{-# INLINE foldl1' #-}
174+{-# INLINE foldl1'Reduce #-}
174−{-# INLINE foldr1 #-}
175+{-# INLINE foldr1Reduce #-}
175−last, minimum, maximum, find, findIndex, elemIndex, foldl1', foldr1
176+last, minimum, maximum, find, findIndex, elemIndex, foldl1'Reduce, foldr1Reduce
176 :: Monad m => Stream m Int -> m (Maybe Int)
177 :: Monad m => Stream m Int -> m (Maybe Int)
178{-# INLINE minimumBy #-}
179{-# INLINE minimumBy #-}
179{-# INLINE maximumBy #-}
180{-# INLINE maximumBy #-}
180minimumBy, maximumBy :: Monad m => Stream m Int -> m (Maybe Int)
181minimumBy, maximumBy :: Monad m => Stream m Int -> m (Maybe Int)
182−{-# INLINE foldl' #-}
183+{-# INLINE foldl'Reduce #-}
183−{-# INLINE foldr #-}
184+{-# INLINE foldlM'Reduce #-}
184−{-# INLINE foldrM #-}
185+{-# INLINE foldrReduce #-}
185{-# INLINE length #-}
186{-# INLINE length #-}
186{-# INLINE sum #-}
187{-# INLINE sum #-}
187{-# INLINE product #-}
188{-# INLINE product #-}
189+foldl'Reduce, foldlM'Reduce, foldrReduce, length, sum, product
191+ => Stream m Int -> m Int
193+{-# INLINE foldl'Build #-}
194+{-# INLINE foldlM'Build #-}
195+{-# INLINE foldrBuild #-}
196+{-# INLINE foldrMBuild #-}
197+foldrBuild, foldrMBuild, foldl'Build, foldlM'Build
188−foldl', foldr, foldrM, length, sum, product :: Monad m => Stream m Int -> m Int
199+ => Stream m Int -> m [Int]
190{-# INLINE all #-}
201{-# INLINE all #-}
191{-# INLINE any #-}
202{-# INLINE any #-}
@@ -228,11 +239,18 @@ mapM_ :: Monad m => Stream m Int -> m ()
228mapM_ = S.mapM_ (\_ -> return ())
239mapM_ = S.mapM_ (\_ -> return ())
230toList = S.toList
241toList = S.toList
243+foldl'Build = S.foldl' (flip (:)) []
231−foldr = S.foldr (+) 0
244+foldrBuild = S.foldr (:) []
232−foldr1 = S.foldr1 (+)
245+foldlM'Build = S.foldlM' (\xs x -> return $ x : xs) []
233−foldrM = S.foldrM (\a xs -> return $ a + xs) 0
246+foldrMBuild = S.foldrM (\x xs -> return $ x : xs) []
248+foldrReduce = S.foldr (+) 0
249+foldr1Reduce = S.foldr1 (+)
234−foldl' = S.foldl' (+) 0
250+foldl'Reduce = S.foldl' (+) 0
235−foldl1' = S.foldl1' (+)
251+foldl1'Reduce = S.foldl1' (+)
252+foldlM'Reduce = S.foldlM' (\xs a -> return $ a + xs) 0
236last = S.last
254last = S.last
237elem = S.elem maxValue
255elem = S.elem maxValue
238notElem = S.notElem maxValue
256notElem = S.notElem maxValue