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