假设我在使用 Cats-effect
和无标记 final方法的项目中有以下方法签名:
def schedule[F[_]: Applicative : Async: Timer]
我正在尝试使用纯 FP 在 schedule
方法调用上安排操作。
我这样试过:
Timer[F].sleep(FiniteDuration(10, TimeUnit.SECONDS)) *> {
Applicative[F].pure(println("tick"))
}
但它没有起作用,因为 effect println("tick")
在 Timer
初始化阶段执行。
如何让它正常工作?
我是否还可以创建某种递归构造,以便每 10 秒重复我的预定操作?
最佳答案
Applicative[F].pure
没有延迟效果。它只会将一个纯值提升到 F
中。由于您有 Async
上下文绑定(bind),我建议使用 Async[F].delay(println("tick"))
。
您可以像这样轻松地递归调用它:
def schedule[F[_]: Async: Timer]: F[Unit]
def repeat[F[_]: Async: Timer]: F[Unit] =
schedule >> repeat
关于scala - 如何在抽象效果类型上配置猫计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62725929/