Scala:找不到 ContextShift[cats.effect.IO] 的隐式值
Scala: Cannot find an implicit value for ContextShift[cats.effect.IO]
我刚开始使用 Scala,想与我的数据库建立连接。
(我的知识来自 scala/doobie https://www.scala-exercises.org/ 上的教程)
现在这是代码:
import doobie._
import doobie.implicits._
import cats.effect._
import cats.implicits._
import doobie.hikari._
...
val transactor: Resource[IO, HikariTransactor[IO]] =
for {
ce <- ExecutionContexts.fixedThreadPool[IO](32) // our connect EC
be <- Blocker[IO] // our blocking EC
xa <- HikariTransactor.newHikariTransactor[IO](
"org.h2.Driver", // driver classname
"jdbc:mysql://localhost:3306/libraries", // connect URL
"root", // username
"", // password
ce, // await connection here
be // execute JDBC operations here
)
} yield xa
当我尝试构建我的代码时,我收到以下错误消息:
Error:(25, 53) Cannot find an implicit value for ContextShift[cats.effect.IO]:
import ContextShift[cats.effect.IO] from your effects library
if using IO, use cats.effect.IOApp or build one with cats.effect.IO.contextShift
xa <- HikariTransactor.newHikariTransactor[IO](
现在我有两个问题:
- 到底是什么问题?
- 我该如何解决?
编译器无法在隐式范围内找到 ContextShift[IO]
实例的问题,这是某些方法所必需的(不确定到底是哪个)。
您需要在隐式范围内声明自己的范围,例如
val dbExecutionContext = ExecutionContext.global // replace with your DB specific EC.
implicit val contextShift: ContextShift[IO] = IO.contextShift(dbExecutionContext)
或错误提示消息 cats.effect.IOApp
已将 ContextShift[IO]
声明为 protected implicit def
- 请参阅 https://github.com/typelevel/cats-effect/blob/master/core/shared/src/main/scala/cats/effect/IOApp.scala#L83,您可以在该代码所在的位置使用和传递引用.
但是要小心,因为它使用 Scala 默认的全局执行上下文。
希望对您有所帮助!
我刚开始使用 Scala,想与我的数据库建立连接。
(我的知识来自 scala/doobie https://www.scala-exercises.org/ 上的教程)
现在这是代码:
import doobie._
import doobie.implicits._
import cats.effect._
import cats.implicits._
import doobie.hikari._
...
val transactor: Resource[IO, HikariTransactor[IO]] =
for {
ce <- ExecutionContexts.fixedThreadPool[IO](32) // our connect EC
be <- Blocker[IO] // our blocking EC
xa <- HikariTransactor.newHikariTransactor[IO](
"org.h2.Driver", // driver classname
"jdbc:mysql://localhost:3306/libraries", // connect URL
"root", // username
"", // password
ce, // await connection here
be // execute JDBC operations here
)
} yield xa
当我尝试构建我的代码时,我收到以下错误消息:
Error:(25, 53) Cannot find an implicit value for ContextShift[cats.effect.IO]:
import ContextShift[cats.effect.IO] from your effects library
if using IO, use cats.effect.IOApp or build one with cats.effect.IO.contextShift xa <- HikariTransactor.newHikariTransactor[IO](
现在我有两个问题:
- 到底是什么问题?
- 我该如何解决?
编译器无法在隐式范围内找到 ContextShift[IO]
实例的问题,这是某些方法所必需的(不确定到底是哪个)。
您需要在隐式范围内声明自己的范围,例如
val dbExecutionContext = ExecutionContext.global // replace with your DB specific EC.
implicit val contextShift: ContextShift[IO] = IO.contextShift(dbExecutionContext)
或错误提示消息 cats.effect.IOApp
已将 ContextShift[IO]
声明为 protected implicit def
- 请参阅 https://github.com/typelevel/cats-effect/blob/master/core/shared/src/main/scala/cats/effect/IOApp.scala#L83,您可以在该代码所在的位置使用和传递引用.
但是要小心,因为它使用 Scala 默认的全局执行上下文。
希望对您有所帮助!