[Haskell-cafe] Conduit : is it possible to write this function?

Michael Snoyman michael at snoyman.com
Fri Aug 23 11:14:22 CEST 2013


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 at 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 at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130823/872b06be/attachment.htm>


More information about the Haskell-Cafe mailing list