scala – Cats中的效果抽象和并行执行
发布时间:2020-12-16 18:50:29 所属栏目:安全 来源:网络整理
导读:我有下一个使用Cats IO编写的代码,它并行执行多个动作(简化): import cats.effect._import cats.implicits._import scala.concurrent.ExecutionContext.Implicits.global class ParallelExecIO { def exec: IO[List[String]] = { val foo = IO.shift * IO("
我有下一个使用Cats IO编写的代码,它并行执行多个动作(简化):
import cats.effect._ import cats.implicits._ import scala.concurrent.ExecutionContext.Implicits.global class ParallelExecIO { def exec: IO[List[String]] = { val foo = IO.shift *> IO("foo") val bar = IO.shift *> IO("bar") List(foo,bar).parSequence } } 是否可以使用效果抽象重写此代码?应提供哪些类型的证据? 样品: class ParallelExecIO[F[_]: ConcurrentEffect /* ??? */] { def exec: F[List[String]] = { val foo = Async.shift[F](implicitly) *> "foo".pure[F] val bar = Async.shift[F](implicitly) *> "bar".pure[F] List(foo,bar).parSequence } }
解决方法
同
scalaVersion := "2.12.5" scalacOptions += "-Ypartial-unification" libraryDependencies += "org.typelevel" %% "cats-core" % "1.1.0" libraryDependencies += "org.typelevel" %% "cats-effect" % "0.10" 错误是 Error:(23,22) could not find implicit value for parameter P: cats.Parallel[F,F] List(foo,bar).parSequence 所以试试吧 import cats.Parallel import cats.effect.{Async,ConcurrentEffect} import cats.implicits._ import scala.concurrent.ExecutionContext.Implicits.global import scala.language.higherKinds class ParallelExecIO[F[_]: ConcurrentEffect,G[_]](implicit ev: Parallel[F,G]) { def exec: F[List[String]] = { val foo = Async.shift[F](implicitly) *> "foo".pure[F] val bar = Async.shift[F](implicitly) *> "bar".pure[F] List(foo,bar).parSequence } } 当然你可以引入类型Parallel [F [_]] = cats.Parallel [F,F]然后这可以重写为类ParallelExecIO [F [_]:ConcurrentEffect:Parallel] {… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |