加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 
    }
}

[error] value parSequence is not a member of List[F[String]]

解决方法

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] {…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读