@@ -10,10 +10,11 @@
11module LinearOps where
11module LinearOps where
13+import Control.Monad (when)
13import Data.Maybe (fromJust)
14import Data.Maybe (fromJust)
14import Prelude
15import Prelude
15 (Monad, Int, (+), ($), (.), return, fmap, even, (>), (<=), (==), (<=),
16 (Monad, Int, (+), ($), (.), return, fmap, even, (>), (<=), (==), (<=),
16− subtract, undefined, Maybe(..), odd, Bool, not)
17+ subtract, undefined, Maybe(..), odd, Bool, not, (>>=), mapM_, curry)
18import qualified Streamly as S
19import qualified Streamly as S
19import qualified Streamly.Prelude as S
20import qualified Streamly.Prelude as S
@@ -74,7 +75,7 @@ sourceUnfoldr n = S.unfoldr step n
74 step cnt =
75 step cnt =
75 if cnt > n + value
76 if cnt > n + value
76 then Nothing
77 then Nothing
77− else (Just (cnt, cnt + 1))
78+ else Just (cnt, cnt + 1)
79{-# INLINE sourceUnfoldrM #-}
80{-# INLINE sourceUnfoldrM #-}
80sourceUnfoldrM :: (S.IsStream t, S.MonadAsync m) => Int -> t m Int
81sourceUnfoldrM :: (S.IsStream t, S.MonadAsync m) => Int -> t m Int
@@ -154,32 +155,19 @@ uncons s = do
155{-# INLINE init #-}
156{-# INLINE init #-}
156init :: Monad m => Stream m a -> m ()
157init :: Monad m => Stream m a -> m ()
160− Nothing -> return ()
161− Just x -> S.runStream x
158+init s = S.init s >>= Prelude.mapM_ S.runStream
163{-# INLINE tail #-}
160{-# INLINE tail #-}
164tail :: Monad m => Stream m a -> m ()
161tail :: Monad m => Stream m a -> m ()
165−tail s = do
162+tail s = S.tail s >>= Prelude.mapM_ tail
168− Nothing -> return ()
171{-# INLINE nullHeadTail #-}
164{-# INLINE nullHeadTail #-}
172nullHeadTail :: Monad m => Stream m Int -> m ()
165nullHeadTail :: Monad m => Stream m Int -> m ()
173nullHeadTail s = do
166nullHeadTail s = do
174 r <- S.null s
167 r <- S.null s
175− if not r
168+ when (not r) $ do
177 _ <- S.head s
169 _ <- S.head s
180− Nothing -> return ()
181− Just x -> nullHeadTail x
170+ S.tail s >>= Prelude.mapM_ nullHeadTail
184mapM_ = S.mapM_ (\_ -> return ())
172mapM_ = S.mapM_ (\_ -> return ())
185toList = S.toList
173toList = S.toList
@@ -254,7 +242,7 @@ mapM t = transform . t . S.mapM return
254mapMaybe = transform . S.mapMaybe
242mapMaybe = transform . S.mapMaybe
255 (\x -> if Prelude.odd x then Nothing else Just ())
243 (\x -> if Prelude.odd x then Nothing else Just ())
256mapMaybeM = transform . S.mapMaybeM
244mapMaybeM = 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 ())
258sequence t = transform . t . S.sequence
246sequence t = transform . t . S.sequence
259filterEven = transform . S.filter even
247filterEven = transform . S.filter even
260filterAllOut = transform . S.filter (> maxValue)
248filterAllOut = transform . S.filter (> maxValue)
@@ -285,19 +273,19 @@ zipAsync, zipAsyncM :: S.MonadAsync m => Stream m Int -> m ()
285zip src = do
273zip src = do
286 r <- S.tail src
274 r <- S.tail src
287 let src1 = fromJust r
275 let src1 = fromJust r
288− transform $ (S.zipWith (,) src src1)
276+ transform (S.zipWith (,) src src1)
289zipM src = do
277zipM src = do
290 r <- S.tail src
278 r <- S.tail src
291 let src1 = fromJust r
279 let src1 = fromJust r
292− transform $ (S.zipWithM (\a b -> return (a,b)) src src1)
280+ transform (S.zipWithM (curry return) src src1)
293zipAsync src = do
281zipAsync src = do
294 r <- S.tail src
282 r <- S.tail src
295 let src1 = fromJust r
283 let src1 = fromJust r
296− transform $ (S.zipAsyncWith (,) src src1)
284+ transform (S.zipAsyncWith (,) src src1)
297zipAsyncM src = do
285zipAsyncM src = do
298 r <- S.tail src
286 r <- S.tail src
299 let src1 = fromJust r
287 let src1 = fromJust r
300− transform $ (S.zipAsyncWithM (\a b -> return (a,b)) src src1)
288+ transform (S.zipAsyncWithM (curry return) src src1)
301concat _n = return ()
289concat _n = return ()
303-------------------------------------------------------------------------------
291-------------------------------------------------------------------------------