相关疑难解决方法(0)

Doobie - 将任意效果提升到 ConnectionIO CE3

我正在尝试将项目从 cats-effect 2 迁移到 cats-effect 3,我正在使用 doobie 与数据库交互。以前我可以ConnectionIO按照描述的IO那样升级,但是升级后我没有找到任何实现,如何使用 CE3 实现相同的效果?LiftIO[ConnectionIO]

scala doobie cats-effect

10
推荐指数
1
解决办法
2392
查看次数

在Doobie中并行运行查询

是否可以使用Doobie并行运行多个查询?

我有以下(伪)查询:

def prepareForQuery(input: String): ConnectionIO[Unit] = ???
val gettAllResults: ConnectionIO[List[(String, BigDecimal)]] = ???
def program(input : String) : ConnectionIO[List[(String, BigDecimal)]] = for{
    _ <- prepareForQuery(input)
    r <- gettAllResults
  } yield r
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容:

import doobie._
import doobie.implicits._
import cats.implicits._
val xa = Transactor.fromDataSource[IO](myDataSource)
val result = (program(i1),program(i2)).parMapN{case (a,b) => a ++ b}
val rs = result.transact(xa).unsafeRunSync
Run Code Online (Sandbox Code Playgroud)

但是,找不到的NonEmptyParallel实例ConnectionIO

错误:(107,54)找不到参数p的隐式值:cats.NonEmptyParallel [doobie.ConnectionIO,F] val结果=(program(i1),program(i2))。parMapN {case(a,b)= > a ++ b}

我是否缺少明显的东西或尝试无法完成的事情?谢谢

functional-programming scala scala-cats doobie

6
推荐指数
1
解决办法
266
查看次数

Doobie - 将任意效果提升到 ConnectionIO 中

我正在尝试在使用 Doobie 将用户插入数据库的同一事务中发送电子邮件。
我知道我可以举IOConnectionIO通过使用Async[ConnectionIO].liftIO(catsIO)其中catsIO: IO[String]
但在我的代码,我不上工作IO,我使用F与约束,例如F[_]: Async 于是我可以代替F我自己的单子进行测试。

是否可以在不直接使用类型的情况下以某种方式提升F[String]进入? ConnectionIO[String]IO

这是我为 IO 类型找到的答案:Doobie and DB access composition within 1 transaction

scala scala-cats doobie cats-effect

5
推荐指数
1
解决办法
1202
查看次数