【问题标题】: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 会更好地满足您的需求。

    【讨论】:

    • 谢谢。你帮我解开了头。
    猜你喜欢
    • 1970-01-01
    • 2014-08-14
    • 2011-09-08
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2013-05-24
    相关资源
    最近更新 更多