我想做一些需要效果的编程(谁没有:-)。 特别是像scalaz之类的任务,可以运行一些异步数据检索,然后使用一种类似于Future的效果来处理完成后的结果。
我注意到,类型级别Cats现在具有效果Monad ,但也有类型 eff Monad 项目。两者都用于功能上的效果处理。所以现在我可以选择在哪里投入时间而且我很困惑。
或者我可以在eff FutureEffect或TaskEffect中使用例如wrap cats.Effect。那是不是一个好主意?
由于
答案 0 :(得分:4)
尽管他们的名字有些相似,但两个项目的目的完全不同。
cat-effect 的目的是为Scala(+一些其他相关的类型类)提供原则/标准IO
类型,一种抽象方式(例如同步,异步)等)并提高互操作性和第三方图书馆之间的可组合性。
Eff 的目的是提供monad变换器(mtl)编程风格的替代方案。它不一定处理IO / Task等,但提供了一种更简洁的堆栈效果方式(例如,如果你需要编写Reader + State + Writer效果,手动操作会变得很痛苦)。
根据您的描述:
特别喜欢scalaz之类的任务,可以运行一些异步数据检索,并使一个Future类似于将在完成时处理结果的效果。
cats-effect
似乎更能满足您的需求。