on master help sign in
tutorial: Update conduit interop example
dfc13d8Kirill Elagin
src/Streamly/Tutorial.hs+7−6
@@ -1620,21 +1620,22 @@ import Control.Monad.Trans.Class (MonadTrans (lift))
1620-- Interop with @conduit@:
1620-- Interop with @conduit@:
1621--
1621--
1622-- @
1622-- @
1623−-- import "Streamly.Prelude" (SerialT)
1623+-- import "Streamly.Prelude" (IsStream, MonadAsync, SerialT)
1624-- import qualified "Streamly.Prelude" as S
1624-- import qualified "Streamly.Prelude" as S
1625-- import qualified Data.Conduit as C
1625-- import qualified Data.Conduit as C
1626-- import qualified Data.Conduit.List as C
1626-- import qualified Data.Conduit.List as C
1627−-- import qualified Data.Conduit.Combinators as C
1628--
1627--
1629−-- -- It seems there is no way out of a conduit as it does not provide an
1628+-- -- | conduit to streamly
1630−-- -- uncons or a tail function. We can convert streamly to conduit though.
1629+-- fromConduit :: (IsStream t, MonadAsync m) => C.ConduitT () a m () -> t m a
1630+-- fromConduit = S.unfoldrM C.unconsM . C.sealConduitT
1631--
1631--
1632-- -- | streamly to conduit
1632-- -- | streamly to conduit
1633-- toConduit :: Monad m => SerialT m a -> C.ConduitT i a m ()
1633-- toConduit :: Monad m => SerialT m a -> C.ConduitT i a m ()
1634−-- toConduit s = C.unfoldM S.'uncons' s
1634+-- toConduit = C.unfoldM S.'uncons'
1635--
1635--
1636-- main = do
1636-- main = do
1637+-- S.'toList' (fromConduit (C.sourceList [1..3])) >>= print
1637−-- C.runConduit (toConduit (S.'fromFoldable' [1..3]) C..| C.sinkList) >>= print
1638+-- C.runConduit (toConduit (S.'fromFoldable' [1..3]) C..| C.consume) >>= print
1638-- @
1639-- @
1639
1640
1640-- $comparison
1641-- $comparison