5

看起来很简单

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

也可用于构建功能性 JDBC 层

4

1 回答 1

4

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

Free Monad 的优点:

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

免费单子的缺点:

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

Doobie 将来会有无标签版本。

于 2019-06-10T17:23:19.490 回答