@@ -96,17 +96,23 @@ module Streamly.Internal.Data.Stream.StreamK.Type
97 -- * Reader
97 -- * Reader
98 , withLocal
98 , withLocal
102import Control.Monad (ap, (>=>))
104import Control.Monad (ap, (>=>))
103import Control.Monad.Reader.Class (MonadReader(..))
105import Control.Monad.Reader.Class (MonadReader(..))
106+import Control.Monad.State.Strict (StateT)
104import Control.Monad.Trans.Class (MonadTrans(lift))
107import Control.Monad.Trans.Class (MonadTrans(lift))
105import Data.Function (fix)
108import Data.Function (fix)
106import Streamly.Internal.Data.SVar.Type (State, adaptState, defState)
109import Streamly.Internal.Data.SVar.Type (State, adaptState, defState)
111+import qualified Control.Monad.State.Strict as State
112+import qualified Prelude
107import Prelude hiding
114import Prelude hiding
108 (map, mapM, concatMap, foldr, repeat, null, reverse, tail, init)
115 (map, mapM, concatMap, foldr, repeat, null, reverse, tail, init)
109−import qualified Prelude
111------------------------------------------------------------------------------
117------------------------------------------------------------------------------
112-- Basic stream type
118-- Basic stream type
@@ -1368,3 +1374,34 @@ foldlS step = go
1368{-# INLINE reverse #-}
1374{-# INLINE reverse #-}
1369reverse :: Stream m a -> Stream m a
1375reverse :: Stream m a -> Stream m a
1370reverse = foldlS (flip cons) nil
1376reverse = foldlS (flip cons) nil
1378+------------------------------------------------------------------------------
1379+-- Lifting inner monad
1380+------------------------------------------------------------------------------
1382+{-# INLINE evalStateT #-}
1383+evalStateT :: Monad m => m s -> Stream (StateT s m) a -> Stream m a
1388+ -- XXX Do not use stream monad
1390+ (res, s1) <- lift $ st >>= State.runStateT (uncons m1)
1392+ Just (h, t) -> cons h (go (return s1) t)
1395+{-# INLINE liftInner #-}
1396+liftInner :: (Monad m, MonadTrans t, Monad (t m)) =>
1397+ Stream m a -> Stream (t m) a
1402+ -- XXX Do not use stream monad
1404+ res <- fromEffect $ lift $ uncons m1
1406+ Just (h, t) -> cons h (go t)