将源的输出合并到流

时间:2017-12-21 11:07:17

标签: haskell conduit

我想要一个以源为参数的管道,并使用后者的输出结合自己的输出。在类型中,例如像。

combine :: ConduitM () Int m ()
        -> ConduitM Int (Int, Int) m ()

我希望以下

runConduit $ yieldMany [(1::Int)..]
          .| combine (yieldMany [100..])
          .| takeC 5
          .| sinkList

给出

[(1,100), (2,102), (3,103), (4,104), (5, 105)]

这是我的用例的简化版本。但我不确定如何超越

combine source = mapC $ \i -> do
  -- stream output from source somehow
  (i, i)

这可能吗?

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找ZipSource,在你的情况下看起来像这样:

getZipSource $ (,)
    <$> ZipSource (yieldMany [1..])
    <*> ZipSource (yieldMany [100..])