控制流程的吞吐量

时间:2015-09-24 21:31:33

标签: scala scalaz scalaz-stream

我正在尝试使用计时器Process[F, A]来控制Process的吞吐量:

val p: Process[List,Int] = Process.iterateEval(0)(i => List(i + 1))

val timer: Process[Task, Duration] = time.awakeEvery(1 second)(Strategy.DefaultStrategy, Strategy.DefaultTimeoutScheduler)

val p2 = p.zipWith(timer)((v, d) => v)

但是编译器说p2Process[Object, Int]。根据{{​​1}}签名,它应该是zipWith()

如果Process[Task, Int]不是Process[F, A],如何限制F的输出?我试过Task,但我有类似的问题。

1 个答案:

答案 0 :(得分:1)

没有理由F除了效果完整的monad之外别无他法,例如Task。如果您的代码不需要任何效果,那么您可以使用类似Process0(Process [Nothing,O])之类的进程。

如果您更改

,您的代码将完全正常运行
val p: Process[Task,Int] = Process.iterateEval(0)(i => Task.now(i + 1)))

或者传递给iteateEval的f是纯粹的,只是

val p : Process0[Int] = Process.iterate(0)(i => i + 1)