【问题标题】:Typelevel Cats.Effect vs Typlevel eff. which and why?类型级 Cats.Effect 与类型级 eff。哪个,为什么?
【发布时间】:2018-09-29 08:56:56
【问题描述】:
我想做一些需要效果的编程(谁不需要:-)。
特别是像 scalaz Task 运行一些异步数据检索和 ruturn 类似 Future 的效果,它将在完成时处理结果。
我注意到类型级别的 Cats 现在有 Effect Monad 并且还有类型级别的 eff Monad 项目。两者都用于在功能上处理效果。所以现在我可以选择在哪里投入时间,我很困惑。
- 我应该使用哪个?
- 每个图书馆是否有一些潜在的精神或意图
指导我的选择?
- 每个库的用途是什么?
- 它解决了什么问题?
或者我可以同时使用两者,例如将cats.Effect 包装在一个eff FutureEffect 或TaskEffect 中。这是个好主意吗?
谢谢
【问题讨论】:
标签:
scala
functional-programming
scala-cats
【解决方案1】:
尽管他们的名字有些相似,但这两个项目的目的却完全不同。
cats-effect 的目的是为 Scala(+一些其他相关的类型类)提供一个有原则/标准的 IO 类型,一种对其进行抽象的方法(例如 Sync、Async 等.) 并提高 3rd 方库之间的互操作性和可组合性。
Eff 的目的是提供一种替代 monad 转换器 (mtl) 编程风格的方法。它不一定要处理 IO/Task 等,但提供了一种更简洁的方式来堆叠效果(例如,如果您需要组合 Reader + State + Writer 效果,手动操作会变得很痛苦)。
根据您的描述:
特别是像 scalaz Task 运行一些异步数据检索和 ruturn 类似 Future 的效果,它将在完成时处理结果。
看来cats-effect 会更好地满足您的需求。