管道奇怪的行为

时间:2018-03-12 04:26:52

标签: haskell conduit

我是Haskell Conduit的新手,我正在学习如何使用它。我遇到了一个奇怪的行为。

在这里,我们有:

#!/usr/bin/env stack
-- stack --resolver lts-10.9 script

import Conduit

main :: IO ()
main = runConduit
  $ yieldMany [1..10::Int]
 .| do
      mapC id .| (await >>= maybe (return ()) leftover)
      printC
 .| do
      leftover "Hello There!"
      printC

结果是:

$ ./Example21.hs
"Hello There!"
2
3
4
5
6
7
8
9
10

我不明白为什么1没有打印出来。

1 个答案:

答案 0 :(得分:2)

这是剩菜的行为。剩饭不能从.|融合算子的外部传播。正如the Haddocks所说:

  

从右侧管道返回的剩余数据将被丢弃。

如果您需要恢复残羹剩饭,可以使用fusion with leftovers功能。