{-# 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 -- ^ will receive all messages -> 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)