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

时间:2018-04-19 01:09:59

标签: scala functional-programming scala-cats

我想做一些需要效果的编程(谁没有:-)。 特别是像scalaz之类的任务,可以运行一些异步数据检索,然后使用一种类似于Future的效果来处理完成后的结果。

我注意到,类型级别Cats现在具有效果Monad ,但也有类型 eff Monad 项目。两者都用于功能上的效果处理。所以现在我可以选择在哪里投入时间而且我很困惑。

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

或者我可以在eff FutureEffect或TaskEffect中使用例如wrap cats.Effect。那是不是一个好主意?

由于

1 个答案:

答案 0 :(得分:4)

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

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

Eff 的目的是提供monad变换器(mtl)编程风格的替代方案。它不一定处理IO / Task等,但提供了一种更简洁的堆栈效果方式(例如,如果你需要编写Reader + State + Writer效果,手动操作会变得很痛苦)。

根据您的描述:

  

特别喜欢scalaz之类的任务,可以运行一些异步数据检索,并使一个Future类似于将在完成时处理结果的效果。

cats-effect似乎更能满足您的需求。