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)

しかし、コンパイラはそれp2Process[Object, Int]. zipWith()署名によると、それはProcess[Task, Int].

Process[F, A]if Fis not aの出力を調整するにはどうすればよいTaskですか? 試してみましsleepUntil()たが、同様の問題がありました。

4

1 に答える 1

1

F.のような完全な効果のモナド以外にならない理由はありませんTask。コードに効果が必要ない場合は、Process0 (Process[Nothing,O]) などの型プロセスを使用できます。

変更すると、コードは完全に正常に機能します

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

またはfiteateEvalに渡された場合は純粋で、単純に

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