@@ -84,6 +84,10 @@ module Streamly.Streams.StreamK
84 , mapMaybe
84 , mapMaybe
85 , sequence
85 , sequence
87 -- * Semigroup Style Composition
91 -- * Semigroup Style Composition
@@ -102,7 +106,9 @@ import Control.Monad (void)
102import Control.Monad.Reader.Class (MonadReader(..))
106import Control.Monad.Reader.Class (MonadReader(..))
103import Control.Monad.Trans.Class (MonadTrans(lift))
107import Control.Monad.Trans.Class (MonadTrans(lift))
104import Data.Semigroup (Semigroup(..))
108import Data.Semigroup (Semigroup(..))
105−import Prelude hiding (foldl, foldr, last, map, mapM, mapM_, repeat, sequence)
110+ hiding (foldl, foldr, last, map, mapM, mapM_, repeat, sequence,
106import qualified Prelude
112import qualified Prelude
108import Streamly.SVar
114import Streamly.SVar
@@ -517,6 +523,29 @@ repeat a = let x = cons a x in x
517fromFoldable :: (IsStream t, Foldable f) => f a -> t m a
523fromFoldable :: (IsStream t, Foldable f) => f a -> t m a
518fromFoldable = Prelude.foldr cons nil
524fromFoldable = Prelude.foldr cons nil
526+-------------------------------------------------------------------------------
528+-------------------------------------------------------------------------------
531+take :: IsStream t => Int -> t m a -> t m a
532+take n m = fromStream $ go n (toStream m)
534+ go n1 m1 = Stream $ \_ stp sng yld ->
535+ let yieldk a r = yld a (go (n1 - 1) r)
536+ in if n1 <= 0 then stp else (unStream m1) Nothing stp sng yieldk
538+{-# INLINE filter #-}
539+filter :: IsStream t => (a -> Bool) -> t m a -> t m a
540+filter p m = fromStream $ go (toStream m)
542+ go m1 = Stream $ \_ stp sng yld ->
543+ let single a | p a = sng a
545+ yieldk a r | p a = yld a (go r)
546+ | otherwise = (unStream r) Nothing stp single yieldk
547+ in (unStream m1) Nothing stp single yieldk
520------------------------------------------------------------------------------
549------------------------------------------------------------------------------
521-- Semigroup
550-- Semigroup
522------------------------------------------------------------------------------
551------------------------------------------------------------------------------