问题标签 [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 回答
422 浏览

scala - 给定将多次调用的异步,如何使用猫效应的 IO 生成 Traversable

我真正想做的是监控多个文件,当其中任何一个文件被修改时,我想更新一些状态并使用这种状态产生副作用。我想我想要的是产生 a 的scana 。但我看不到那里的路径。TraversableTraversable[IO[_]]

作为产生这个的最小尝试,我写了

但这有两个主要缺陷。它为我正在观看的每个文件创建一个线程,这有点重。但更重要的是,一旦修改了单个文件,程序就会结束,即使onModify如果程序保持运行,它会被调用更多次。

我不喜欢使用更好的文件,这似乎是阻力最小的路径。但我确实需要使用 Cats IO。

0 投票
1 回答
682 浏览

scala - FS2 Stream with StateT[IO, _, _],定期转储状态

我有一个消耗无限数据流的程序。在此过程中,我想记录一些指标,这些指标形成一个幺半群,因为它们只是简单的总和和平均值。定期,我想在某处写出这些指标,清除它们,然后返回累积它们。我基本上有:

因此,大多数执行IO直接使用并使用StateT.liftF. 在某些情况下,我会调用一些recordMetric. 最后我有一个流:

我想定期,说每分钟左右,转储指标,所以我尝试了:

然后我执行通常的顶级程序内容,run即使用 start 状态调用,然后调用unsafeRunSync.

问题是,我只看到空指标!我怀疑这与我的 monoid 隐含地提供空指标有关,sendStream但我无法弄清楚为什么应该这样或如何解决它。也许有一种方法可以将这些sendMetrics调用“交织”到主流中?

编辑:这是一个最小的完整可运行示例

现在,如果我这样做:

然后我得到了预期的结果——状态正确地累积到输出中。但如果我这样做:

然后我看到一个空列表一直打印出来。我本来希望打印出部分列表(大约 2 个元素)。

0 投票
1 回答
630 浏览

scala - Twitter 未来与猫箭

我正在尝试将Twitter FutureCats Kleisli 和 Arrow结合起来,但我遇到了一个我不知道如何解决的编译错误。

代码如下:

我得到的错误是:

如果我用Scala Future替换Twitter Future并导入全局执行器 import scala.concurrent.ExecutionContext.Implicits.global然后代码运行。

我的build.sbt看起来像:

您知道如何修复编译错误吗?

亲切的问候!

0 投票
1 回答
175 浏览

scala - logback.xml appender 不与猫 IOApp 一起使用

我有一个使用 AWS Kinesis 客户端库的 scala 应用程序。

我正在使用带有 logstash 编码器的 logback 将来自我的应用程序和 KCL 的日志格式化为 JSON。

我的应用程序也是使用cats.effects.IO.

当上面的代码运行时,来自我的应用程序和来自 KCL 的日志通过我的 JSON appender 正确格式化。

当我尝试使用时出现问题cats.effects.IOApp

当这个版本运行时,来自我的应用程序的日志仍然通过我的 JSON appender 正确格式化,但来自 KCL 的日志恢复为默认的基本记录器。

我已将其范围缩小到引擎盖下的使用,并且如果我使用本质上是引擎盖Fiber下的操作,则可以重现该问题。我在 JVM 上运行,所以是在后台运行的代码。run(args.toList).start.flatMap(_.join).unsafeRunSyncIOApp

我的logback.xml

0 投票
1 回答
444 浏览

scala - 使用 cat-effect 的 Timer 实现可取消的 setInterval

这是我尝试过的,但在第一次睡眠完成后无法取消。

我怎样才能实现真正的可取消setInterval

0 投票
2 回答
531 浏览

scala - 如何将 EitherT 的异常包装到左侧?

想象一下我有OptionT[IO, Value]这样的

我怎样才能抓住err1它并将其包装成Left[FailureMsg]. 我希望recoverWith对我有所帮助,但令人惊讶的是它是mapLeft. 我应该怎么办 ?

0 投票
1 回答
377 浏览

scala - 如何使用猫效 IO 在 Play 应用程序中实现多个线程池

cats-effect在我的 Play 应用程序中,我使用's服务我的请求IO,而不是Future在控制器中,像这样(超级简化):

然后在 Play 的默认线程池上(异步)处理请求。现在,我想实现多个线程池来处理不同类型的请求。如果我使用Futures,我可以这样做:

但我没有使用Futures,我正在使用IO,而且我不确定实现它的正确方法。这看起来很有希望,但似乎有点笨拙:

这是实施它的正确方法吗?这里有最佳实践吗?我搞砸了吗?谢谢。

0 投票
1 回答
173 浏览

scala - Intellij:IO[Long] 类型的表达式不符合预期的 FS2_[O2_] 类型

我尝试了这个博客的代码:a-streaming-library-with-a-superpower-fs2-and-functional-programming

Intellij 中,这段代码:

给了我这个例外:

运行代码sbt没有问题。

有没有办法在Intellij中摆脱这个异常?

0 投票
1 回答
6871 浏览

scala - 猫效应和异步 IO 细节

几天来,我一直在关注猫效应和 IO。而且我觉得我对这种效果有一些误解,或者只是我错过了它的意义。

  1. 首先——如果 IO 可以替代 Scala 的 Future,我们如何创建异步 IO 任务?使用IO.shift? 使用IO.async? 是IO.delay同步还是异步?我们可以用这样的代码做一个通用的异步任务Async[F].delay(...)吗?或者当我们用unsafeToAsyncor调用 IO 时会发生异步unsafeToFuture
  2. 猫效应中的异步和并发有什么意义?他们为什么分开?
  3. IO 是绿色线程吗?如果是,为什么猫效应中有一个 Fiber 对象?据我了解,Fiber 是绿色线程,但文档声称我们可以将 IO 视为绿色线程。

我将不胜感激任何澄清,因为我未能理解那些和互联网上的猫效应文档并没有那么有帮助......

0 投票
1 回答
681 浏览

scala - Cats Effect IO:使用 Scala 集合编写 IO

这是一个玩具 Scala 程序,它从控制台读取 10 个数字并将每个数字加 1 打印出来:

上面的代码无法编译。我得到:

我究竟做错了什么?