私は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]
この 最近の例 は、これが可能だったことを示していました(?)。
ここで何が欠けていますか?
ありがとうございました
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
を暗黙的に提供する必要があります。
次のインポートが機能します( 承認済みの回答 にも記載されています)、
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.0
とcats-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
)