Typelevel Cats.Effect vs Typlevel eff。哪个,为什么?

Kar*_*arl 4 functional-programming scala scala-cats

我想做一些需要效果的编程(谁不需要:-)。特别是像 scalaz Task 之类的东西来运行一些异步数据检索并产生类似 Future 的效果,该效果将在完成时处理结果。

我注意到 typelevel Cats 现在有Effect Monad但也有 typelevel eff Monad项目。两者都是为了在功能上处理效果。所以现在我可以选择在哪里投资我的时间,我很困惑。

  • 我应该使用哪个?
  • 每个图书馆是否有一些潜在的精神或意图可以指导我的选择?
  • 每个图书馆的用途是什么?
  • 它解决什么问题?

或者我可以同时使用两者,例如在 eff FutureEffect 或 TaskEffect 中包装 cat.Effect。这甚至是个好主意吗?

谢谢

Den*_*sca 5

尽管它们的名称有些相似,但这两个项目的目的完全不同。

cat-effect的目的是IO为 Scala(+ 一些其他相关的类型类)提供一种原则/标准类型,一种对其进行抽象的方法(例如同步、异步等)并提高第三方库之间的互操作性和可组合性。

Eff的目的是提供一种替代 monad 转换器 (mtl) 编程风格的方法。它不一定处理 IO/Task 等,但提供了一种更清晰的方法来堆叠效果(例如,如果您需要组合 Reader + State + Writer 效果,手动执行它会变得很痛苦)。

从你的描述来看:

特别是像 scalaz Task 之类的东西来运行一些异步数据检索并产生类似 Future 的效果,该效果将在完成时处理结果。

看起来你需要的东西会更好地由cats-effect.