{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
module Control.Concurrent.NQE.Network
( fromSource
, withSource
) where
import Control.Concurrent.NQE.Process
import Data.Conduit
import UnliftIO
fromSource ::
(MonadIO m, Mailbox mbox)
=> ConduitT () msg m ()
-> mbox msg
-> m ()
fromSource src mbox = runConduit $ src .| awaitForever (`send` mbox)
withSource ::
(MonadUnliftIO m, Mailbox mbox)
=> ConduitT () msg m ()
-> mbox msg
-> (Async () -> m a)
-> m a
withSource src mbox = withAsync (fromSource src mbox)