问题标签 [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 - 猫的匹配器 EitherT 和效果
我是猫和函数式编程的新手,我正在努力单元测试函数数据类型,如EitherT
. 有示例代码:
我想使用 Spec2 对其进行测试,但我不知道如何正确执行。尝试过这样的事情,但它不起作用:
我想要像这样非常简单的断言:
scala - 使用 fs2 将流值列表转换为值流
我想使用fs2 Streams、cats EitherT和cats-effect IO 定义一个具有以下签名的函数。
它将每个值从 vs 映射到一个值流,并将所有这些值收集到一个新流中。
我试过类似的东西:
但似乎 Stream 没有隐含的定义。
scala - fs2.Stream[IO,Something] 不返回 take(1)
我有一个返回 fs2.Stream 的函数。
通常它是一个无限流,除非我给它传递一个测试标志,在这种情况下它应该输出一个值并停止。
无限流工作正常。它无限地给了我所有的测量值。测试流确实只给了我第一次测量,仅此而已。我遇到的问题是在最后一次测量之后 Stream 没有返回。它永远阻塞。我究竟做错了什么?
注意:我认为我抽象了基本代码,但有关更多上下文,请查看我的项目:https ://github.com/jkransen/fijnstof/blob/ZIO/src/main/scala/nl/kransen/fijnstof /Main.scala
scala - Doobie - 将任意效果提升到 ConnectionIO
我正在尝试在与使用 Doobie 将用户插入数据库的同一事务中发送电子邮件。
我知道我可以通过使用where但是IO
在
我的代码中我不操作,我使用约束,例如
所以我可以用我自己的 monad 替换进行测试。 ConnectionIO
Async[ConnectionIO].liftIO(catsIO)
catsIO: IO[String]
IO
F
F[_]: Async
F
F[String]
是否可以在ConnectionIO[String]
不直接使用类型的情况下以某种方式提升 in IO
?
这是我为 IO 类型找到的答案:Doobie and DB access composition within 1 transaction
scala - FS2 将资源(或效果)作为状态传递
我正在尝试实现一个控制相机的应用程序。相机命令表示为 CameraAction 对象流:
假设我有一个测试流,它发出“记录”并在 20 秒后发出“停止”,再过 20 秒后发出另一个“记录”消息,依此类推,输入流是无限的。
然后应用程序使用“记录”它应该创建一个 GStreamer 管道实例(即它是一种效果)并“运行”它,在“停止”时它“停止”管道并关闭它。然后在随后的“记录”中,使用新的 GStreamer 管道重复该模式。
问题是我需要在流事件的句柄之间传递一个不纯的可变对象的实例。
FS2 文档建议使用块来使流有状态,所以我尝试了
这段代码的问题是,实际录制不会发生在“录制”事件上,而是评估整个块的效果,即当“停止录制”消息到达时,相机会打开,然后立即再次关闭。
如何在不分块的情况下传递“状态”?或者有没有其他方法可以达到我需要的结果?
这可能类似于 带有 StateT[IO, _, _] 的 FS2 Stream,定期转储状态 ,但不同之处在于,在我的情况下,状态不是纯数据结构而是资源。
scala - 使用 scala 猫效应执行副作用
我正在尝试在 scala 中使用猫效果,并且在世界尽头我有以下类型:
IO[Vector[IO[Vector[IO[Unit]]]]]
我发现只有一种方法可以运行它:
但它看起来很丑陋。请帮助我了解如何执行复杂的副作用。
更新:
1)首先IO
- 我打开 excel 文件并获取行向量,即IO[Vector[Row]]
.
2)第二IO
- 我对每一行的数据库执行查询。我不能用Vector[_]
,组成 IO monad
3)第三- 我使用DBIO
为 excel 中的每一行创建 PDF 文件。Vector[Results]
所以我有这样的功能:
1)String=>IO[Vector[Row]]
2)Row=>IO[Vector[Results]]
3)Vector[Results] => IO[Unit]
scala - Scala:找不到 ContextShift [cats.effect.IO] 的隐式值
我刚开始使用 scala 并想建立与我的数据库的连接。
(我的知识来自https://www.scala-exercises.org/上的 scala/doobie 教程)
现在这里是代码:
当我尝试构建我的代码时,我收到以下错误消息:
错误:(25, 53) 找不到 ContextShift[cats.effect.IO] 的隐式值:
从效果库中导入 ContextShift[cats.effect.IO]
如果使用 IO,请使用cats.effect.IOApp 或使用cats.effect.IO.contextShift xa <- HikariTransactor.newHikariTransactor[IO](
现在我有两个问题:
- 究竟是什么问题?
- 我如何解决它?
scala - ParTraverse 不是 NonEmptyList 的值
我按照 cat IO 网站上的说明并行运行一系列效果:
我的代码如下所示:
但我得到一个编译时错误说:
我已经导入了以下内容:
而且我还有以下暗示:
为什么我仍然遇到问题?
scala - 没有触发 Guava 缓存删除
我有一种情况,我需要跟踪的一些事件在特定超时 ( expiryTimeout
) 后变得“陈旧”。过期后,我需要“删除”过期事件的引用,并通知外部服务该事件已过期。如果在到期之前接收到相同密钥的更新事件,则超时被“重置”(例如事件被“刷新”)。在这种情况下不需要发送通知。
我正在尝试使用番石榴缓存来实现上述目标并且不重新发明轮子,但我必须遗漏一些东西,因为似乎没有触发过期。
我有以下IO
代码来创建“缓存”:
最值得注意的是,我使用 anval asyncRemovalListener = RemovalListeners.asynchronous(removalListener, evictionEs)
来确保过期和删除是异步完成的,而不是作为其他缓存操作(读/写)的一部分。
我创建了以下示例应用程序来简单地测试事物:
然而,这可悲地未能做到我期望它做的事情。:) 当我运行它时,我得到了这些日志行,并且在几秒钟之后,应用程序终止(作为IO.sleep(6.seconds)
终止并“赢得” race
)。
我错过了什么?谢谢
scala - 将 Doobie 流从数据库保存到文件
Doobie select 返回一个fs2.Stream(doobie.ConnectionIO, String)
. 如果我们需要将其写入文件,显而易见的选择是调用stream.compile.toList.transact(transactor)
然后将此列表保存到文件中。
有没有办法以流方式保存结果而不将其转换为列表?