我有一个worker函数
worker :: a -> Either b c我想将它应用于a流,并生成b和c两个流,并进一步处理这些流。例如,我希望在Map中累积c (本质上是为了折叠流)并将b输出到stderr。
我如何使用io-streams实现这一点?似乎我不能调用connect两次。所以我必须把它放在分区之前,这样分区将以一种“逆变量”的方式在OutputStream上操作:
contrapartitionEithers
:: OutputStream b -> OutputStream c -> IO (OutputStream (Either b c))可实现性吗?如果没有,如何完成手头的任务?如果是,则is在某种程度上与System.IO.Streams.zip是“双重”的
System.IO.Streams.zip
:: InputStream a -> InputStream b -> IO (InputStream (a, b))发布于 2017-10-11 07:23:58
有时正确的问题包含答案。所以这确实是可能的:
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))https://stackoverflow.com/questions/46677144
复制相似问题