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+hs@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