Почему Дуби использует бесплатную монаду? - PullRequest
5 голосов
/ 10 июня 2019

Кажется, что просто

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

Может также использоваться для создания функционального слоя JDBC

1 Ответ

4 голосов
/ 10 июня 2019

Суммировано из ответов @SystemFw и @tpolecat из https://gitter.im/scala/scala?at=5cfe6505bf4cbd167c619960

Плюсы бесплатной монады:

  • клиентский код не имеет доступа к экземпляру Connection и поэтому не может его утечь
  • пользовательский F[_] отсутствует, поэтому некорректный (асинхронный) эффект нельзя использовать в пределах границы транзакции. Это важно, поскольку большинство драйверов JDBC разработали реализацию java.sql.Connection как однопоточную.

Минусы свободной монады:

  • код клиента не имеет доступа к Connection и поэтому не может использовать альтернативные ORM (например, JOOQ)
  • пользователь F[_] отсутствует, поэтому вы не можете вкладывать определенные эффекты в транзакцию.

У Doobie будет версия без тегов в будущем.

...