前段时间我遇到过这个问题,你需要先有一个 Iteratee(或一个 Enumerator)才能组成 Enumeratees。
您可以从这样做开始:
模块主要在哪里
导入数据。枚举器
将合格的 Data.Enumerator.List 导入为 EL
主::IO()
main = run_ (enum $$ EL.consume) >>= print
在哪里
enum = (enumList 5 [1..] $= EL.isolate 100) $= EL.filter 对
对 = (==0) 。(`mod` 2)
前面的代码将枚举器列表组合在一起创建一个新的枚举器,然后将其应用到consume Iteratee。
($=) 用于组合Enumerator 和 Enumeratee 以创建新的 enumerator,而 (=$) 可用于组合Iteratee 和 Enumeratee 以创建新的 Iteratee。我推荐后者,因为在使用 (=$) 组成 Enumeratees 列表时,类型不会让你大吃一惊:
模块主要在哪里
导入数据。枚举器
将合格的 Data.Enumerator.List 导入为 EL
主::IO()
main = run_ (enumList 5 [1..] $$ it) >>= print
在哪里
它=折叠(=$)
EL.消费
[ EL. 隔离 100
, EL.filter ((==0) . (`mod` 2))
]
如果您尝试通过创建 Enumerator 而不是 Iteratee 来实现上述相同的功能,那么在使用foldl' ($=) (enumList 5 [1..]) [list-of-enumeratees]
.
希望这可以帮助。