@@ -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-------------------------------------------------------------------------------