假设有一个函数
更具体地说,http4s 服务器需要一个
我怀疑它需要一些幕后关联 ID,我对此没问题,我更感兴趣的是如何从 FP 视角安全且正确地执行它。
最终,我期望的签名可能是:
作为一个附加想法,是否有可能进行背压控制?
A => IO[B]
(也称为 Kleisli[IO, A, B]
),该函数旨在被多次调用,并具有副作用,例如更新数据库。如何将其多次调用委托给流(我猜测是 Pipe[IO, A, B]
)(fs2、monix observable/iterant)?这样做的原因是为了能够累积状态,在时间窗口内批量调用等。更具体地说,http4s 服务器需要一个
Request => IO[Response]
,因此我正在寻找如何在流上操作(以获得上述好处),但最终向 http4s 提供这样的函数。我怀疑它需要一些幕后关联 ID,我对此没问题,我更感兴趣的是如何从 FP 视角安全且正确地执行它。
最终,我期望的签名可能是:
Pipe[IO, A, B] => (A => IO[B])
,这样 Kleisli 的调用就会通过管道进行传递。作为一个附加想法,是否有可能进行背压控制?
StateT
类型的变换器不适用?它们确切地提供了一种有状态计算的能力。 - Some NameStateT
但它既不能满足需要具有透明状态的 Kleisli,也不能访问用于窗口操作的后续调用。 - V-LampBidiFlow
。这样建模有各种动机。 - V-LampKleisli
的签名是A => IO[B]
,但您想要的是A => IO[A]
(链接)或Seq[A] => IO[Seq[B]]
(批处理)。后者仅在效果实际支持Seq
时才有用。 - Markus Appel