Scala 推特未来&;猫箭

Scala 推特未来&;猫箭,scala,scala-cats,twitter-finagle,cats-effect,Scala,Scala Cats,Twitter Finagle,Cats Effect,我正在尝试将推特未来与猫克莱斯利和阿罗结合起来,我有一个编译错误,我不知道如何解决它 代码如下: package com.example import scala.language.higherKinds import cats.arrow.Arrow import cats.implicits._ import cats.data.{EitherT, Kleisli} import com.twitter.util.Future object ArrowApp extends App {

我正在尝试将推特未来猫克莱斯利和阿罗结合起来,我有一个编译错误,我不知道如何解决它

代码如下:

package com.example
import scala.language.higherKinds

import cats.arrow.Arrow
import cats.implicits._
import cats.data.{EitherT, Kleisli}
import com.twitter.util.Future

object ArrowApp extends App {

  type Resp[A] = EitherT[Future, Exception, A]
  type KleisliResp[A] = Kleisli[Resp, List[Int], A]

  val first: KleisliResp[Int] = Kleisli(_ => EitherT[Future, Exception, Int](Future.value(Right(1))))
  val second: KleisliResp[String] = Kleisli(_ => EitherT[Future, Exception, String](Future.value(Right("TEST"))))

  def combine[F[_, _] : Arrow, A, B, C](fab: F[A, B], fac: F[A, C]): F[A, (B, C)] = Arrow[F].lift((a: A) => (a, a)) >>> (fab *** fac)

  val firstAndSecond: KleisliResp[(Int, String)] = combine(first, second)
}
我得到的错误是:

Error:(20, 31) could not find implicit value for evidence parameter of type cats.arrow.Arrow[[A, B]cats.data.Kleisli[com.example.cats.ArrowApp.Resp,A,B]] 
val firstAndSecond: KleisliResp[(Int, String)] = combine(first, second)
如果我用Scala Future替换Twitter Future,并导入全局执行器导入Scala.concurrent.ExecutionContext.Implicits.global,那么代码将运行

我的build.sbt看起来像:

organization := "com.example"
name := "scala-test"
version := "1.0"
scalaVersion := "2.12.3"
libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "1.2.0",
  "org.typelevel" %% "cats-free" % "1.2.0",
  "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.0",
  "com.twitter" %% "finagle-core" % "18.3.0"
)
scalacOptions ++= Seq("-Ypartial-unification")
resolvers += Resolver.sonatypeRepo("releases")
addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.7")
你知道如何修复编译错误吗


亲切的问候

你可能需要这样的东西,因为

[…]为各种Twitter开源Scala项目提供了cats类型的类实例(以及其他有用的与cats相关的东西)

它目前包括以下内容:

package com.example
import scala.language.higherKinds

import cats.arrow.Arrow
import cats.implicits._
import cats.data.{EitherT, Kleisli}
import com.twitter.util.Future

object ArrowApp extends App {

  type Resp[A] = EitherT[Future, Exception, A]
  type KleisliResp[A] = Kleisli[Resp, List[Int], A]

  val first: KleisliResp[Int] = Kleisli(_ => EitherT[Future, Exception, Int](Future.value(Right(1))))
  val second: KleisliResp[String] = Kleisli(_ => EitherT[Future, Exception, String](Future.value(Right("TEST"))))

  def combine[F[_, _] : Arrow, A, B, C](fab: F[A, B], fac: F[A, C]): F[A, (B, C)] = Arrow[F].lift((a: A) => (a, a)) >>> (fab *** fac)

  val firstAndSecond: KleisliResp[(Int, String)] = combine(first, second)
}
  • 为Future、Var和Try(包括Monad或MonadError、Semigroup和equality)键入类实例

Twitter的
Future
与scala的标准
Future
无关,默认情况下,CAT不会为Twitter
Future
s提供任何类型类。

非常感谢您的帮助。将catbird添加到导入io.catbird.util的项目中,解决了编译问题。