scala - 类型级 Cats.Effect 与类型级 eff。哪个,为什么?

标签 scala functional-programming scala-cats

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

我注意到类型级别的 Cats 现在有 效果单子(monad) 还有类型级别 有效单子(monad)项目。两者都用于在功能上处理效果。所以现在我可以选择在哪里投资我的时间,我很困惑。

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

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

    谢谢

    最佳答案

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

    的目的|猫效应 是提供一个原则/标准IO Scala 的类型(+ 一些其他相关的类型类),一种对其进行抽象的方法(例如 Sync、Async 等)并提高 3rd 方库之间的互操作性和可组合性。

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

    根据您的描述:

    In particular something like scalaz Task to run some asynchronous data retrieval and ruturn a Future like effect that will handle the resuts on completion.


    cats-effect 似乎可以更好地满足您的需求。 .

    关于scala - 类型级 Cats.Effect 与类型级 eff。哪个,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49911178/

    相关文章:

    scala - 将 Set 转换为cats.data.NonEmptySet?

    scala - 惯用的 scala 代码的好例子

    swift - 字典初始化(分组 :by:), 2 级 - 简化代码

    scala - 我可以在 Scala 中定义和使用类和对象之外的函数吗?

    用于函数式编程的 pythonic 风格

    scala - Scala 是否支持类型构造函数的部分应用?

    scala - 在 Spark 中将列标记为分类

    Scala 类型推断不适用于泛型案例类和 lambda

    scala - 抽象类,为什么不能声明私有(private)的val和var类成员?

    scala - 如何堆叠 State 和 IO monad