on master help sign in
Add fromPrimVar - generate a stream from a Prim Var
commit4374014c94a5228f23fff2a9ea3b5c57e2aa124d authorHarendra Kumar <harendra.kumar@gmail.com> dateFri 27 Dec 2019, 22:12 (7 years ago) parent97ecb28
3 files changed+21
src/Streamly/Internal/Data/Stream/StreamD.hs+9 src/Streamly/Internal/Mutable/Prim/Var.hs+2 src/Streamly/Internal/Prelude.hs+10
src/Streamly/Internal/Data/Stream/StreamD.hs+9
@@ -103,6 +103,7 @@ module Streamly.Internal.Data.Stream.StreamD
103103 , fromListM
104104 , fromStreamK
105105 , fromStreamD
106+ , fromPrimVar
106107 , fromSVar
107108
108109 -- * Elimination
@@ -333,6 +334,7 @@ import qualified Control.Monad.Reader as Reader
333334import qualified Control.Monad.State.Strict as State
334335import qualified Prelude
335336
337+import Streamly.Internal.Mutable.Prim.Var (MonadMut, Prim, Var, readVar)
336338import Streamly.Internal.Data.Atomics (atomicModifyIORefCAS_)
337339import Streamly.Internal.Memory.Array.Types (Array(..))
338340import Streamly.Internal.Data.Fold.Types (Fold(..))
@@ -664,6 +666,13 @@ fromListM = Stream step
664666toStreamD :: (K.IsStream t, Monad m) => t m a -> Stream m a
665667toStreamD = fromStreamK . K.toStream
666668
669+{-# INLINE_NORMAL fromPrimVar #-}
670+fromPrimVar :: (MonadMut m, Prim a) => Var m a -> Stream m a
671+fromPrimVar var = Stream step ()
672+ where
673+ {-# INLINE_LATE step #-}
674+ step _ () = readVar var >>= \x -> return $ Yield x ()
675+
667676-------------------------------------------------------------------------------
668677-- Generation from SVar
669678-------------------------------------------------------------------------------
src/Streamly/Internal/Mutable/Prim/Var.hs+2
@@ -24,6 +24,8 @@
2424module Streamly.Internal.Mutable.Prim.Var
2525 (
2626 Var
27+ , MonadMut
28+ , Prim
2729
2830 -- * Construction
2931
src/Streamly/Internal/Prelude.hs+10
@@ -58,6 +58,7 @@ module Streamly.Internal.Prelude
5858 , fromListM
5959 , K.fromFoldable
6060 , fromFoldableM
61+ , fromPrimVar
6162
6263 -- * Elimination
6364
@@ -466,6 +467,7 @@ import Streamly.Internal.Data.Pipe.Types (Pipe (..))
466467import Streamly.Internal.Data.Time.Units
467468 (AbsTime, MilliSecond64(..), addToAbsTime, diffAbsTime, toRelTime,
468469 toAbsTime)
470+import Streamly.Internal.Mutable.Prim.Var (MonadMut, Prim, Var)
469471
470472import Streamly.Internal.Data.Strict
471473
@@ -872,6 +874,14 @@ fromHandle h = go
872874 str <- liftIO $ IO.hGetLine h
873875 yld str go
874876
877+-- | Construct a stream by reading a 'Prim' 'Var' repeatedly.
878+--
879+-- /Internal/
880+--
881+{-# INLINE fromPrimVar #-}
882+fromPrimVar :: (IsStream t, MonadMut m, Prim a) => Var m a -> t m a
883+fromPrimVar = fromStreamD . D.fromPrimVar
884+
875885------------------------------------------------------------------------------
876886-- Elimination by Folding
877887------------------------------------------------------------------------------