@@ -10,6 +10,7 @@
10module StreamDOps where
10module StreamDOps where
12import Control.Monad (when)
12import Control.Monad (when)
13+import Data.Maybe (isJust)
13import Prelude
14import Prelude
14 (Monad, Int, (+), ($), (.), return, (>), even, (<=),
15 (Monad, Int, (+), ($), (.), return, (>), even, (<=),
15 subtract, undefined, Maybe(..), not, mapM_, (>>=))
16 subtract, undefined, Maybe(..), not, mapM_, (>>=))
@@ -25,7 +26,8 @@ maxValue = value + 1000
25-------------------------------------------------------------------------------
26-------------------------------------------------------------------------------
27{-# INLINE uncons #-}
28{-# INLINE uncons #-}
28−{-# INLINE nullHeadTail #-}
29+{-# INLINE nullTail #-}
30+{-# INLINE headTail #-}
29{-# INLINE scan #-}
31{-# INLINE scan #-}
30{-# INLINE map #-}
32{-# INLINE map #-}
31{-# INLINE filterEven #-}
33{-# INLINE filterEven #-}
@@ -43,7 +45,7 @@ maxValue = value + 1000
43{-# INLINE composeAllInFilters #-}
45{-# INLINE composeAllInFilters #-}
44{-# INLINE composeAllOutFilters #-}
46{-# INLINE composeAllOutFilters #-}
45{-# INLINE composeMapAllInFilter #-}
47{-# INLINE composeMapAllInFilter #-}
46−uncons, nullHeadTail, map, scan, filterEven, filterAllOut,
48+uncons, nullTail, headTail, map, scan, filterEven, filterAllOut,
47 filterAllIn, takeOne, takeAll, takeWhileTrue, dropAll, dropWhileTrue, zip,
49 filterAllIn, takeOne, takeAll, takeWhileTrue, dropAll, dropWhileTrue, zip,
48 -- concat,
50 -- concat,
49 composeAllInFilters, composeAllOutFilters, composeMapAllInFilter
51 composeAllInFilters, composeAllOutFilters, composeMapAllInFilter
@@ -109,16 +111,27 @@ runStream :: Monad m => Stream m a -> m ()
109runStream = S.runStream
111runStream = S.runStream
111toNull = runStream
113toNull = runStream
112uncons s = do
115uncons s = do
113 r <- S.uncons s
116 r <- S.uncons s
114 case r of
117 case r of
115 Nothing -> return ()
118 Nothing -> return ()
116 Just (_, t) -> uncons t
119 Just (_, t) -> uncons t
117−nullHeadTail s = do
120+
122+tail :: Monad m => Stream m a -> m ()
123+tail s = S.tail s >>= mapM_ tail
118 r <- S.null s
126 r <- S.null s
119 when (not r) $ do
127 when (not r) $ do
128+ S.tail s >>= mapM_ nullTail
120− _ <- S.head s
131+ h <- S.head s
121− S.tail s >>= mapM_ nullHeadTail
133+ S.tail s >>= mapM_ headTail
122toList = S.toList
135toList = S.toList
123foldl = S.foldl' (+) 0
136foldl = S.foldl' (+) 0
124last = S.last
137last = S.last
@@ -163,7 +176,7 @@ composeAllInFilters = compose (S.filter (<= maxValue))
163composeAllOutFilters = compose (S.filter (> maxValue))
176composeAllOutFilters = compose (S.filter (> maxValue))
164composeMapAllInFilter = compose (S.filter (<= maxValue) . S.map (subtract 1))
177composeMapAllInFilter = compose (S.filter (<= maxValue) . S.map (subtract 1))
166−{-# INLINABLE composeScaling #-}
179+{-# INLINE composeScaling #-}
167composeScaling :: Monad m => Int -> Stream m Int -> m ()
180composeScaling :: Monad m => Int -> Stream m Int -> m ()
168composeScaling m =
181composeScaling m =
169 case m of
182 case m of