@@ -10,10 +10,11 @@
1010
1111module LinearOps where
1212
13+import Control.Monad (when)
1314import Data.Maybe (fromJust)
1415import Prelude
1516 (Monad, Int, (+), ($), (.), return, fmap, even, (>), (<=), (==), (<=),
16− subtract, undefined, Maybe(..), odd, Bool, not)
17+ subtract, undefined, Maybe(..), odd, Bool, not, (>>=), mapM_, curry)
1718
1819import qualified Streamly as S
1920import qualified Streamly.Prelude as S
@@ -74,7 +75,7 @@ sourceUnfoldr n = S.unfoldr step n
7475 step cnt =
7576 if cnt > n + value
7677 then Nothing
77− else (Just (cnt, cnt + 1))
78+ else Just (cnt, cnt + 1)
7879
7980{-# INLINE sourceUnfoldrM #-}
8081sourceUnfoldrM :: (S.IsStream t, S.MonadAsync m) => Int -> t m Int
@@ -154,32 +155,19 @@ uncons s = do
154155
155156{-# INLINE init #-}
156157init :: Monad m => Stream m a -> m ()
157−init s = do
158− r <- S.init s
159− case r of
160− Nothing -> return ()
161− Just x -> S.runStream x
158+init s = S.init s >>= Prelude.mapM_ S.runStream
162159
163160{-# INLINE tail #-}
164161tail :: Monad m => Stream m a -> m ()
165−tail s = do
166− r <- S.tail s
167− case r of
168− Nothing -> return ()
169− Just x -> tail x
162+tail s = S.tail s >>= Prelude.mapM_ tail
170163
171164{-# INLINE nullHeadTail #-}
172165nullHeadTail :: Monad m => Stream m Int -> m ()
173166nullHeadTail s = do
174167 r <- S.null s
175− if not r
176− then do
168+ when (not r) $ do
177169 _ <- S.head s
178− t <- S.tail s
179− case t of
180− Nothing -> return ()
181− Just x -> nullHeadTail x
182− else return ()
170+ S.tail s >>= Prelude.mapM_ nullHeadTail
183171
184172mapM_ = S.mapM_ (\_ -> return ())
185173toList = S.toList
@@ -254,7 +242,7 @@ mapM t = transform . t . S.mapM return
254242mapMaybe = transform . S.mapMaybe
255243 (\x -> if Prelude.odd x then Nothing else Just ())
256244mapMaybeM = transform . S.mapMaybeM
257− (\x -> if Prelude.odd x then (return Nothing) else return $ Just ())
245+ (\x -> if Prelude.odd x then return Nothing else return $ Just ())
258246sequence t = transform . t . S.sequence
259247filterEven = transform . S.filter even
260248filterAllOut = transform . S.filter (> maxValue)
@@ -285,19 +273,19 @@ zipAsync, zipAsyncM :: S.MonadAsync m => Stream m Int -> m ()
285273zip src = do
286274 r <- S.tail src
287275 let src1 = fromJust r
288− transform $ (S.zipWith (,) src src1)
276+ transform (S.zipWith (,) src src1)
289277zipM src = do
290278 r <- S.tail src
291279 let src1 = fromJust r
292− transform $ (S.zipWithM (\a b -> return (a,b)) src src1)
280+ transform (S.zipWithM (curry return) src src1)
293281zipAsync src = do
294282 r <- S.tail src
295283 let src1 = fromJust r
296− transform $ (S.zipAsyncWith (,) src src1)
284+ transform (S.zipAsyncWith (,) src src1)
297285zipAsyncM src = do
298286 r <- S.tail src
299287 let src1 = fromJust r
300− transform $ (S.zipAsyncWithM (\a b -> return (a,b)) src src1)
288+ transform (S.zipAsyncWithM (curry return) src src1)
301289concat _n = return ()
302290
303291-------------------------------------------------------------------------------