这个问题的动机是这样的场景-我们有一系列的值,这些值由
我们的输入流类型为
对我来说,我觉得我应该编写一个自定义的
Sum
编码表示。假设我们用Either ByteString ByteString
来表示字节流在错误和良好状态下的情况。现在,我们有另一个函数可以压缩ByteString
流。是否可能在Either ByteString ByteString
输入流上运行此函数,并压缩其中任何一个(不仅仅是Right
,而是在Left
被产生而不是Right
时也可以压缩Left
)。compress
函数类型的签名如下(我使用Streaming库):compress :: MonadIO m
=> Int
-- ^ Compression level.
-> Stream (Of ByteString) m r
-> Stream (Of ByteString) m r
我们的输入流类型为
Stream (Of (Either ByteString ByteString)) m r
。那么,是否有一种转换函数可以在输入流上运行compress
,并输出一个类型为Stream (Of (Either ByteString ByteString)) m r
的流,其中两者都被压缩了。对我来说,我觉得我应该编写一个自定义的
compress
,比如说eitherCompress
,如下所示:eitherCompress :: MonadIO m
=> Int
-- ^ Compression level.
-> Stream (Of (Either ByteString ByteString)) m r
-> Stream (Of (Either ByteString ByteString)) m r
这是否正确?如果是这种情况,使用从zstd
库中的以下函数编写eitherCompress
的好方法是什么:
compress :: Int
-- ^ Compression level. Must be >= 1 and <= maxCLevel.
-> IO Result
我已经使用 yield
编写了流生产者,但是我只为简单情况实现了它们,其中输入只是一个源,而不是一个流。非常感谢您对此问题的帮助。
sum
编码,但一直没有能够将各个部分拼凑起来,直到你指出了toSum
和fromSum
方法。 - SalStream(Of ByteString)m()
,而不是r
,我们现在有了()
),那么由于forall
量词,hoist
将无法工作。在这种情况下,什么可以替代“hoist”? - Salhoist
。 - danidiaz