首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >io-streams partitionEithers

io-streams partitionEithers
EN

Stack Overflow用户
提问于 2017-10-11 06:47:28
回答 1查看 58关注 0票数 2

我有一个worker函数

代码语言:javascript
复制
worker :: a -> Either b c

我想将它应用于a流,并生成bc两个流,并进一步处理这些流。例如,我希望在Map中累积c (本质上是为了折叠流)并将b输出到stderr

我如何使用io-streams实现这一点?似乎我不能调用connect两次。所以我必须把它放在分区之前,这样分区将以一种“逆变量”的方式在OutputStream上操作:

代码语言:javascript
复制
contrapartitionEithers
  :: OutputStream b -> OutputStream c -> IO (OutputStream (Either b c))

可实现性吗?如果没有,如何完成手头的任务?如果是,则is在某种程度上与System.IO.Streams.zip是“双重”的

代码语言:javascript
复制
System.IO.Streams.zip
  :: InputStream a -> InputStream b -> IO (InputStream (a, b))
EN

回答 1

Stack Overflow用户

发布于 2017-10-11 07:23:58

有时正确的问题包含答案。所以这确实是可能的:

代码语言:javascript
复制
contrapartitionEithers
  :: OutputStream b -> OutputStream c -> IO (OutputStream (Either b c))
contrapartitionEithers b c = makeOutputStream $ maybe
     (writeTo b Nothing >> writeTo c Nothing)
     (either (writeTo b . Just) (writeTo c . Just))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46677144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档