2

我正在尝试Process[F, A]使用计时器控制 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)

但是编译器说这p2是一个Process[Object, Int]. 根据zipWith()签名,它应该是一个Process[Task, Int].

如何限制Process[F, A]if Fis not a的输出Task?我试过了,sleepUntil()但我有类似的问题。

4

1 回答 1

1

没有理由F除了一个效果完整的 monad 之外什么都没有,比如Task. 如果您的代码不需要任何效果,那么您可以使用 Process0 (Process[Nothing,O]) 之类的类型进程。

如果您更改,您的代码将完全正常

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

或者如果f传递给 iteateEval 是纯的,只是简单

val p : Process0[Int] = Process.iterate(0)(i => i + 1)
于 2015-09-25T05:19:58.553 回答