为什么Doobie使用免费的monad?

时间:2019-06-10 10:18:12

标签: scala doobie

似乎很简单

type Db[F[_], A] = Kleisli[F, Connection, A]
type Transactor[DB[_], F[_]] = DB ~> F

С也可用于构建功能性JDBC层

1 个答案:

答案 0 :(得分:4)

总结来自https://gitter.im/scala/scala?at=5cfe6505bf4cbd167c619960的@SystemFw和@tpolecat答案

免费Monad的优点:

  • 客户端代码无权访问Connection实例,因此不能泄漏
  • 没有用户的F[_],因此不能在事务边界内使用不合适的(异步)效果。这很重要,因为大多数JDBC驱动程序已将java.sql.Connection实现设计为单线程。

免费Monad的缺点:

  • 客户端代码无权访问Connection,因此无法使用其他ORM(如JOOQ)
  • 没有用户的F[_],因此您不能在交易中嵌套特定的效果。

Doobie将来将具有无标签版本。