问题标签 [cats-effect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
177 浏览

scala - 过滤 IO 的集合:List[IO[Page]] scala

我正在重构一个 scala http4s 应用程序以消除一些导致我的应用程序阻塞的讨厌的副作用。我正在用cats.effect.IO 替换.unsafeRunSync。问题如下:

我有 2 个列表: alreadyAccessible: IO[List[Page]] 和 pages: List[Page] 我需要过滤掉不在 alreadyAccessible 中的页面。然后将结果列表映射到数据库中的“授予访问权限”到这些页面。(例如,调用另一个访问数据库并返回 IO[Page] 的方法。

这接近我想要的;但是,它不起作用,因为过滤器需要一个返回布尔值但已经可访问的函数是 IO[List[Page]] 类型的,这使您无法从 IO monad 中删除任何内容。我了解您无法从 IO 中删除数据,因此可以对其进行转换:

不幸的是,这不适用于以下错误:

我认为因为我以某种方式滥用了 for 理解语法,所以我只是不明白为什么我不能做我正在做的事情。

我知道对于这样的问题必须有一个直接的解决方案,因此非常感谢任何输入或建议。感谢您花时间阅读本文!

0 投票
1 回答
342 浏览

scala - Cats Effect 的 IO.suspend 函数究竟做了什么?

猫效应有什么作用IO.suspend,为什么有用?有文档,但并不完全清楚。

文档提供了以下用例:

例如,我为什么要使用上面的,而不是下面的类似功能?

0 投票
1 回答
135 浏览

scala - 通过cats.effect.IO从flatMapping请求超时

我正在尝试使用也在 IO monad 中的 Map 来转换一些封装在cats.effect.IO 中的数据。我将 http4s 与 blaze 服务器一起使用,当我使用以下代码时,请求超时:

正如你可以看到 TODO 评论。我已将此方法缩小到 TODO 注释下方的平面图。如果我删除该 flatMap 并仅将“IO(shift)”返回给遍历的变量,则请求不会超时;但是,这对我没有多大帮助,因为我需要使用具有转换后的 json 的 lstShiftJson 变量。

我的直觉告诉我我正在以某种方式滥用 IO monad,但我不太确定如何。

感谢您花时间阅读本文!

0 投票
1 回答
99 浏览

stream - fs2 评估折叠?通过评估效果折叠?

我希望能够在折叠 fs2 流时评估每一步。

你知道这样做的方法吗?你能写一个辅助函数,由函数的组合组成Stream吗?

假设logger.info()Int => F[Unit]

0 投票
1 回答
796 浏览

scala - Is it okay to use "unsafeRunSync()" in Cats-Effects?

I am using Doobie and in the examples that I found, it uses unsafeRunSync, like:

Under the hood, this function is implemented as follows:

In the docs, I found that "Please note that this function is intended for testing; it should never appear in your mainline production code!". I wonder if it is okay then to use unsafeRunSync in production if it uses this function under the hood?

Also, how do I put a timeout on the execution if not with unsafeRunTimed?

0 投票
1 回答
338 浏览

scala - 如何组合两个具有 zio 效果和不同类型环境的 Http4s 路由

我有两条Http4s路线:

哪里RTask只是Task/RIO一个自定义环境:

可以通过导入“zio-cats-interop”库并做常规来完成具有相同类型参数的两条路由的组合routes1<+>routes1,但是由于类型参数HttpRoutes是不变的,我不能对不同的类型做同样的事情:

有什么解决办法吗?

0 投票
1 回答
255 浏览

scala - 使用scala-cats IO类型封装一个可变Java库

我知道,一般来说,关于决定将什么建模为效果有很多话要说。这个讨论是在 Scala 的函数式编程中关于 IO 的一章中介绍的。

尽管如此,我还没有完成这一章,我只是在与 Cats IO 一起讨论之前端到端浏览它。

同时,我有点需要在工作中尽快交付一些代码。它依赖于一个完全关于突变的 Java 库。该库是很久以前开始的,出于遗留原因,我看不到它们发生变化。

总之,长话短说。实际上将任何变异函数建模为 IO 是封装变异 java 库的可行方法吗?

Edit1(根据要求,我添加了一个片段)

准备好进入一个模型,改变模型而不是创建一个新模型。例如,我会将 jena 与 gremlin 进行对比,gremlin 是一个基于图形数据的函数库。

那是我的 scala 代码,但网站中记录的 java api 看起来像这样。

0 投票
1 回答
247 浏览

scala - 使用 Cats 效果的 Ref 更新和光纤触发器

问题: 我正在尝试解决一个问题,我需要每隔 x 分钟安排一次,我需要更新缓存并且可以进行并发获取。

尝试的解决方案:

  1. 使用带有 Cats 效果的 TrieMap 和 ScheduledThreadPool 执行器:

我实际上是从使用 TrieMap 开始的,因为它提供了线程安全性,并使用了调度线程池来调度更新

  1. 使用 Ref 和 Cats 效应纤维:

然后创建了一个纯猫效应解决方案。

下面的代码会出现 StackOverflow 错误吗?

我正在尝试更新 Ref,并将 Ref 用作由另一根光纤更新的并发缓存。我正在使用递归触发纤维创建。我知道光纤可用于堆栈安全操作。在这种情况下,我将加入创建的旧光纤。所以想了解下面的代码是安全的。

更新(来自下面提供的答案的解决方案)

第三种解决方案:基于其中一个答案的输入。与其为每个递归调用分叉,不如在调用者上分叉。

很想知道上面讨论的方法的优缺点。

0 投票
0 回答
134 浏览

scala - Scala 中的局部效果和可变状态与 Cats

在使用 Scala 进行函数式编程第 14 章(局部效果和可变状态)中,作者陈述了以下内容:

我们称这个新的局部效果单子 ST,它可以代表状态线程、状态转换、状态标记或状态标记。它与 State monad 的不同之处在于它的 run 方法是受保护的,但除此之外它的结构完全相同。

总的来说,它是作用域突变的单子。

我想知道是否有一些东西可以在猫效果中实现这一点?什么是 DataType 或 TypeClass ?

0 投票
0 回答
65 浏览

postgresql - 将 akka 消息写入 doobie 作为 postgres 的接收器

当我在收到消息数据时尝试从 akka 演员写入 postgres 表时遇到问题。我不确切知道真正的问题,我认为这是异步上下文,因为当我调用一个带有一些列表数据作为参数的函数时,该函数应该将列表数据写入 postgres,而不是什么都不执行,它不会仅标记任何错误,它不执行写入功能。数据来自休息点,我使用 akka http 发出请求。

处理写入 postgres 的代码演员。编码:

code 是一个对象,它有一个写入 postgres 的函数,这个函数是从 actor 接收调用的:

错误在于:

如果有另一种方法可以做到这一点,它可能会有所帮助。