You can build this up using the >=< operator[1] in stm-conduit, something
like:

eitherSrc :: MonadResourceBase m
             => Source (ResourceT m) a -> Source (ResourceT m) b -> Source
(ResourceT m) (Either a b)
eitherSrc src1 src2 = do
    join $ lift $ Data.Conduit.mapOutput Left src1 >=<
Data.Conduit.mapOutput Right src2

I think this can be generalized to work with more base monads with some
tweaks to (>=<).

[1]
http://haddocks.fpcomplete.com/fp/7.4.2/20130704-120/stm-conduit/Data-Conduit-TMChan.html#v:-62--61--60-


On Fri, Aug 23, 2013 at 11:32 AM, Erik de Castro Lopo
<mle...@mega-nerd.com>wrote:

> Hi all
>
> Using the Conduit library is it possible to write the function:
>
>    eitherSrc :: MonadResource m
>              => Source m a -> Source m b -> Source m (Either a b)
>
> which combines two sources into new output source such that data being
> produced aysnchronously by the original two sources will be returned
> as either a Left or Right of tne new source?
>
> If so, how?
>
> Cheers,
> Erik
> --
> ----------------------------------------------------------------------
> Erik de Castro Lopo
> http://www.mega-nerd.com/
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to