问题标签 [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.
scala - 给定将多次调用的异步,如何使用猫效应的 IO 生成 Traversable
我真正想做的是监控多个文件,当其中任何一个文件被修改时,我想更新一些状态并使用这种状态产生副作用。我想我想要的是产生 a 的scan
a 。但我看不到那里的路径。Traversable
Traversable[IO[_]]
作为产生这个的最小尝试,我写了
但这有两个主要缺陷。它为我正在观看的每个文件创建一个线程,这有点重。但更重要的是,一旦修改了单个文件,程序就会结束,即使onModify
如果程序保持运行,它会被调用更多次。
我不喜欢使用更好的文件,这似乎是阻力最小的路径。但我确实需要使用 Cats IO。
scala - FS2 Stream with StateT[IO, _, _],定期转储状态
我有一个消耗无限数据流的程序。在此过程中,我想记录一些指标,这些指标形成一个幺半群,因为它们只是简单的总和和平均值。定期,我想在某处写出这些指标,清除它们,然后返回累积它们。我基本上有:
因此,大多数执行IO
直接使用并使用StateT.liftF
. 在某些情况下,我会调用一些recordMetric
. 最后我有一个流:
我想定期,说每分钟左右,转储指标,所以我尝试了:
然后我执行通常的顶级程序内容,run
即使用 start 状态调用,然后调用unsafeRunSync
.
问题是,我只看到空指标!我怀疑这与我的 monoid 隐含地提供空指标有关,sendStream
但我无法弄清楚为什么应该这样或如何解决它。也许有一种方法可以将这些sendMetrics
调用“交织”到主流中?
编辑:这是一个最小的完整可运行示例:
现在,如果我这样做:
然后我得到了预期的结果——状态正确地累积到输出中。但如果我这样做:
然后我看到一个空列表一直打印出来。我本来希望打印出部分列表(大约 2 个元素)。
scala - Twitter 未来与猫箭
我正在尝试将Twitter Future与Cats Kleisli 和 Arrow结合起来,但我遇到了一个我不知道如何解决的编译错误。
代码如下:
我得到的错误是:
如果我用Scala Future替换Twitter Future并导入全局执行器 import scala.concurrent.ExecutionContext.Implicits.global然后代码运行。
我的build.sbt看起来像:
您知道如何修复编译错误吗?
亲切的问候!
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).unsafeRunSync
IOApp
我的logback.xml
:
scala - 使用 cat-effect 的 Timer 实现可取消的 setInterval
这是我尝试过的,但在第一次睡眠完成后无法取消。
我怎样才能实现真正的可取消setInterval
?
scala - 如何将 EitherT 的异常包装到左侧?
想象一下我有OptionT[IO, Value]
这样的
我怎样才能抓住err1
它并将其包装成Left[FailureMsg]
. 我希望recoverWith
对我有所帮助,但令人惊讶的是它是mapLeft
. 我应该怎么办 ?
scala - 如何使用猫效 IO 在 Play 应用程序中实现多个线程池
cats-effect
在我的 Play 应用程序中,我使用's服务我的请求IO
,而不是Future
在控制器中,像这样(超级简化):
然后在 Play 的默认线程池上(异步)处理请求。现在,我想实现多个线程池来处理不同类型的请求。如果我使用Future
s,我可以这样做:
但我没有使用Future
s,我正在使用IO
,而且我不确定实现它的正确方法。这看起来很有希望,但似乎有点笨拙:
这是实施它的正确方法吗?这里有最佳实践吗?我搞砸了吗?谢谢。
scala - Intellij:IO[Long] 类型的表达式不符合预期的 FS2_[O2_] 类型
我尝试了这个博客的代码:a-streaming-library-with-a-superpower-fs2-and-functional-programming
在Intellij 中,这段代码:
给了我这个例外:
运行代码sbt
没有问题。
有没有办法在Intellij中摆脱这个异常?
scala - 猫效应和异步 IO 细节
几天来,我一直在关注猫效应和 IO。而且我觉得我对这种效果有一些误解,或者只是我错过了它的意义。
- 首先——如果 IO 可以替代 Scala 的 Future,我们如何创建异步 IO 任务?使用
IO.shift
? 使用IO.async
? 是IO.delay
同步还是异步?我们可以用这样的代码做一个通用的异步任务Async[F].delay(...)
吗?或者当我们用unsafeToAsync
or调用 IO 时会发生异步unsafeToFuture
? - 猫效应中的异步和并发有什么意义?他们为什么分开?
- IO 是绿色线程吗?如果是,为什么猫效应中有一个 Fiber 对象?据我了解,Fiber 是绿色线程,但文档声称我们可以将 IO 视为绿色线程。
我将不胜感激任何澄清,因为我未能理解那些和互联网上的猫效应文档并没有那么有帮助......
scala - Cats Effect IO:使用 Scala 集合编写 IO
这是一个玩具 Scala 程序,它从控制台读取 10 个数字并将每个数字加 1 打印出来:
上面的代码无法编译。我得到:
我究竟做错了什么?