Pull to refresh

Comments 3

Нужна ли для этого библиотека?


// чтение чего угодно
val reader: Request => F[Option[Response]]
// выброс нужной ошибки, если данных нет
val reader1: Request => F[Response] = req => reader(req).flatMap {
  case Some(v) => v.pure[F]
  case None => xxxxx.raiseError[F, ....]
}
// батчинг
requests.traverse(reader1)
// параллельное исполнение
requests.parTraverse(reader1)
// дедупликация
requests.distinct.traverse(reader1)
// кеширование
val cache: (Request => F[Response]) => (Request => F[Response]) = ???
requests.sequence(cache(reader1))
Ну, по сути руками можно что угодно написать самому и вообще обходиться без зависимостей. Но если у вас несколько проектов с разными людьми и на каждом все будут писать свои решения — начнётся бардак. И новых людей с улицы будет проще подключать к проекту на известных технологиях. Разве что нужна какая-то специфичная реализация или нельзя использовать либу/её зависимости по каким-то причинам вроде поддержки старых JVM.

Это же cats, и всё делается в одну строчку. Хотя да, для людей, не умеющих свободно обращаться с котами и эффектами, библиотека может быть полезна.

Sign up to leave a comment.