{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE RankNTypes #-}
module Control.Concurrent.NQE.Network
( fromSource
, withSource
) where
import Control.Concurrent.Async.Lifted.Safe
import Control.Concurrent.NQE.Process
import Control.Monad.IO.Class
import Control.Monad.Trans.Control
import Data.Conduit
fromSource ::
(MonadIO m, Mailbox mbox)
=> Source m msg
-> mbox msg
-> m ()
fromSource src mbox = src $$ awaitForever (`send` mbox)
withSource ::
(MonadIO m, MonadBaseControl IO m, Forall (Pure m), Mailbox mbox)
=> Source m msg
-> mbox msg
-> (Async () -> m a)
-> m a
withSource src mbox = withAsync (fromSource src mbox)