On Tue, Feb 28, 2012 at 11:04 AM, Alexander V Vershilov <
alexander.vershilov@gmail.com> wrote:
>
> Hello, cafe.
>
> Is it possible to read data from different concurrent sources,
> i.e. read data from source as soon as it become avaliable, e.g.
>
> runResourceT $ (source1 stdin $= CL.map Left)
> >=> (source2 handle $= CL.map Right)
> $= application
> $$ sink
> where >=> - stands for concurrent combining of sources
>
> It would be good if it can be sources of different types (handle or
> STM channel, etc..).
>
> Currently I've found no good way to handle with this situation,
> except of using STM Channels for collecting data
>
> source1 ---+ |
> | sink | output sink
> +---] Channel [-------> application----->]
> | source
> source2 ---+ |
>
> From this point of view application takes concurent data, but this
> implementation requires additional thread per data processing. Also
> in many cases it will require run additional runResourceT (see later
> example).
>
> So if there any possible simplifications? Or ideas how to make (>=>)
> operator.
>
> Example:
>
> So I've got next code in my network-conduit based application:
>
> main :: IO ()
> main = do
> pool <- createDBPool "..." 10
> let r = ServerInit pool
> forkIO $ forever clientConsole --read channel list and send "Left"
> flip runReaderT r $
> runTCPServer (ServerSettings 3500 Nothing) (protoServer)
>
> myServer src sink = do
> ch <- liftIO $ atomically $ newTBMChan 16
> initState <- lift $ ask
> _ <- liftIO $ fork . (flip runReaderT initState) $
> runResourceT $ src $= C.sequence decode
> $= CL.map Right $$ sinkTBMChan ch
> sourceTBMChan ch
> $= process $= C.sequence encode $$ sinkHandle stdout
>
> But in this situation I don't know if freeing of all resources are guaranteed,
> because I'm running additional resourceT in main resourceT scope.
>
> So can you advice is it possible to make concurrent sources now with currenly
> implemented library?
> If it's not possible but worth of implementing, so I can make that functions?
> Is it correct to runResourceT inside another resourceT?
>
> --
> Best regards,
> Alexander V Vershilov
>