Typelevel Cats. Эффект против Typlevel eff. что и почему?

Я хочу заняться программированием, которому нужны эффекты (а кому нет:-). В частности, что-то вроде скалярного Task для запуска асинхронного извлечения данных и возврата к эффекту Future, который будет обрабатывать результаты по завершении.

Я заметил, что у кошек typelevel теперь есть Effect Monad, но есть и проект typelevel eff Monad. И то, и другое предназначено для функциональных воздействий. Так что теперь у меня есть выбор, куда инвестировать свое время, и я в замешательстве.

  • Какой я должен использовать?
  • Есть ли какой-то базовый этос или цель каждой библиотеки, которая будет определять мой выбор?
  • Для чего нужна каждая библиотека?
  • Какую проблему это решает?

Или я могу просто использовать оба, например, wrap cats.Effect в eff FutureEffect или TaskEffect. Это даже хорошая идея?

Спасибо

1 ответ

Решение

Несмотря на то, что их имена несколько похожи, цель этих двух проектов совершенно различна.

Целью кошачьего эффекта является предоставление принципа / стандарта IO тип для Scala (+ некоторые другие связанные классы типов), способ абстрагироваться над ним (например, Sync, Async и т. д.) и улучшить совместимость и компоновку между сторонними библиотеками.

Цель Eff - предоставить альтернативу стилю программирования монадный преобразователь (mtl). Он не обязательно имеет дело с IO/Task и тому подобным, но обеспечивает более чистый способ объединения эффектов (например, если вам нужно создать эффекты Reader + State + Writer, делая это вручную, может стать болезненным).

Из вашего описания:

В частности, что-то вроде скалярного Task для запуска асинхронного извлечения данных и возврата к эффекту Future, который будет обрабатывать результаты по завершении.

Кажется, что то, что вам нужно, будет лучше обслуживаться cats-effect,

Другие вопросы по тегам