Doobie-将任意效果提升到ConnectionIO

列昂蒂

我正在尝试通过与Doobie将用户插入数据库相同的事务发送电子邮件。
我知道我可以通过使用whereIO进入但是在我的代码中,我没有对其进行操作,例如,我使用了约束,因此我可以用自己的monad进行测试。ConnectionIOAsync[ConnectionIO].liftIO(catsIO)catsIO: IO[String]
IOFF[_]: AsyncF

是否可以以某种方式直接F[String]进入ConnectionIO[String]而不使用IO类型?

这是我针对IO类型找到的答案:1次事务中的Doobie和DB访问组成

钱宁·沃尔顿

猫有一个叫做FunctionK的东西,这是自然的转变。

我这样做:

在一切都已建立的世界之巅,您将需要

val liftToConnIO: FunctionK[IO, ConnectionIO] = LiftIO.liftK[ConnectionIO]

在需要从F [String]转换为G [String]的类中(当您构建所有内容时,F将为IO,G将为ConnectionIO),您可以传递liftToConnIO并使用它在需要的地方将F [A]转换为G [A] 。

不想通过IO和ConnectionIO抽象的类可以通过FunctionK进行提升:

class Stuff[F[_], G[_]](emailer: Emailer[F], store: Store[G], liftToG: FunctionK[F, G]) {

  def sendEmail: G[Unit] =
    for {
      _ <- doDatabaseThingsReturnStuffInG
      _ <- liftToG(emailer.sendEmail)
      _ <- doMoreDatabaseThingsReturnStuffInG
     } yield ()

}

(您可能需要在F和G上使用上下文范围(同步?))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将值提升到ValidationNel中

来自分类Dev

将Doobie流从数据库保存到文件

来自分类Dev

如何将更改提升到已经提升的参考

来自分类Dev

如何将PartialFunction提升到任一

来自分类Dev

将双射提升到函子中

来自分类Dev

将双射提升到函子中

来自分类Dev

将RealFrac提升到另一RealFrac功能

来自分类Dev

如何将fclabels镜头提升到Monad?

来自分类Dev

将天真的日期时间提升到系统时区

来自分类Dev

Numpy - 将负元素提升到非整数幂

来自分类Dev

Scala (doobie):类型是不变的

来自分类Dev

从任一提升到IO

来自分类Dev

酿造链接提升到自制python

来自分类Dev

Scala从List [A]提升到List [Option [A]]

来自分类Dev

将函数及其参数提升到不同的单子上下文

来自分类Dev

如何将XML名称空间提升到根元素

来自分类Dev

将函数及其参数提升到不同的Monadic上下文

来自分类Dev

如何将权限提升到 bash 中的 root 并返回?

来自分类Dev

将事件从子组件提升到 Vue.js 中的容器组件?

来自分类Dev

如何将浮动提升到另一个类的实例?

来自分类Dev

将计算从State monad提升到RWS monad

来自分类Dev

如何从2013年提升到2015年?

来自分类Dev

变量声明是否提升到 if 作用域块的顶部?

来自分类Dev

将数组提升到另一个数组的功效-即扩展数组的尺寸

来自分类Dev

使用值类字段的实体的Doobie查询

来自分类Dev

我如何将家庭办公网络从消费者级的性能提升到小型办公室级的性能?

来自分类Dev

LET vs VAR以及从大范围提升到全球范围

来自分类Dev

如何在 ES6 中将变量提升到所有导入之上?

来自分类Dev

如何在doobie中配置事务处理程序?

Related 相关文章

热门标签

归档