packages feed

streamly-examples-0.1.0: examples/Interop/Conduit.hs

{-# LANGUAGE FlexibleContexts #-}

import Streamly.Prelude (IsStream, MonadAsync, SerialT)
import qualified Streamly.Prelude as Stream
import qualified Data.Conduit as Conduit
import qualified Data.Conduit.List as Conduit

-- | conduit to streamly
fromConduit :: (IsStream t, MonadAsync m) => Conduit.ConduitT () a m () -> t m a
fromConduit = Stream.unfoldrM Conduit.unconsM . Conduit.sealConduitT

-- | streamly to conduit
toConduit :: Monad m => SerialT m a -> Conduit.ConduitT i a m ()
toConduit = Conduit.unfoldM Stream.uncons

main :: IO ()
main = do
    Stream.toList (fromConduit (Conduit.sourceList ([1..3]::[Int]))) >>= print
    Conduit.runConduit (toConduit (Stream.fromFoldable ([1..3]::[Int])) Conduit..| Conduit.consume) >>= print