web-dev-qa-db-ja.com

Cats Functor [Future]インスタンスがありません

私はOptionTを使用してFuture[Option[T]]を返すメソッドをfor-comprehensionで組み合わせようとしています。

import cats.data._
import cats.implicits._
import cats.instances.future._

for {
  data <- OptionT(repo.getData(id))
  ... 
}

私が得ているコンパイラエラー:

could not find implicit value for parameter F cats.Functor[scala.concurrent.Future]

この 最近の例 は、これが可能だったことを示していました(?)。

OptionTを追加するためのプルリクエスト

および cats Functor docs

ここで何が欠けていますか?

ありがとうございました

20
kostja

cats.implicits._ 実際に既にインポートしていますcats.syntax.AllSyntaxおよびcats.instances.AllInstances

これらのインポートのみを使用してみてください。

import cats.data._
import cats.implicits._

または(ニーズに応じて):

import cats.data._
import cats.instances.future._

より具体的に:

import cats.data._
import cats.instances.future.catsStdInstancesForFuture

以下も必要になる場合があります。

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

注:もちろん、実稼働環境で実際のExecutionContextを暗黙的に提供する必要があります。

27

次のインポートが機能します( 承認済みの回答 にも記載されています)、

import cats.data.OptionT
import cats.instances.future._ // or import cats.implicits._ 
                               // as implicits include FutureInstances

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

また、重要なことは、org.typelevel:cats:0.9.0cats-core-1.1.0を使用していたSymbol 'type cats.kernel.instances.EqInstances' is missing from the classpath.を使用していたときの依存関係でした。

古いcats-0.9.0を削除し、最新の cats-core および cats-kernel を使用する必要がありました。

libraryDependencies ++= Seq(
  "org.typelevel" %% "cats-core" % "1.1.0",
  "org.typelevel" %% "cats-kernel" % "1.2.0",

  "org.scalatest" %% "scalatest" % "3.0.4" % Test
)
0
prayagupd