我想做一些需要效果的编程(谁不需要:-)。
特别是像 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/