问题标签 [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 的集合: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 理解语法,所以我只是不明白为什么我不能做我正在做的事情。
我知道对于这样的问题必须有一个直接的解决方案,因此非常感谢任何输入或建议。感谢您花时间阅读本文!
scala - 通过cats.effect.IO从flatMapping请求超时
我正在尝试使用也在 IO monad 中的 Map 来转换一些封装在cats.effect.IO 中的数据。我将 http4s 与 blaze 服务器一起使用,当我使用以下代码时,请求超时:
正如你可以看到 TODO 评论。我已将此方法缩小到 TODO 注释下方的平面图。如果我删除该 flatMap 并仅将“IO(shift)”返回给遍历的变量,则请求不会超时;但是,这对我没有多大帮助,因为我需要使用具有转换后的 json 的 lstShiftJson 变量。
我的直觉告诉我我正在以某种方式滥用 IO monad,但我不太确定如何。
感谢您花时间阅读本文!
stream - fs2 评估折叠?通过评估效果折叠?
我希望能够在折叠 fs2 流时评估每一步。
你知道这样做的方法吗?你能写一个辅助函数,由函数的组合组成Stream
吗?
假设logger.info()
是Int => F[Unit]
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
?
scala - 如何组合两个具有 zio 效果和不同类型环境的 Http4s 路由
我有两条Http4s
路线:
哪里RTask
只是Task/RIO
一个自定义环境:
可以通过导入“zio-cats-interop”库并做常规来完成具有相同类型参数的两条路由的组合routes1<+>routes1
,但是由于类型参数HttpRoutes
是不变的,我不能对不同的类型做同样的事情:
有什么解决办法吗?
scala - 使用scala-cats IO类型封装一个可变Java库
我知道,一般来说,关于决定将什么建模为效果有很多话要说。这个讨论是在 Scala 的函数式编程中关于 IO 的一章中介绍的。
尽管如此,我还没有完成这一章,我只是在与 Cats IO 一起讨论之前端到端浏览它。
同时,我有点需要在工作中尽快交付一些代码。它依赖于一个完全关于突变的 Java 库。该库是很久以前开始的,出于遗留原因,我看不到它们发生变化。
总之,长话短说。实际上将任何变异函数建模为 IO 是封装变异 java 库的可行方法吗?
Edit1(根据要求,我添加了一个片段)
准备好进入一个模型,改变模型而不是创建一个新模型。例如,我会将 jena 与 gremlin 进行对比,gremlin 是一个基于图形数据的函数库。
那是我的 scala 代码,但网站中记录的 java api 看起来像这样。
scala - 使用 Cats 效果的 Ref 更新和光纤触发器
问题: 我正在尝试解决一个问题,我需要每隔 x 分钟安排一次,我需要更新缓存并且可以进行并发获取。
尝试的解决方案:
- 使用带有 Cats 效果的 TrieMap 和 ScheduledThreadPool 执行器:
我实际上是从使用 TrieMap 开始的,因为它提供了线程安全性,并使用了调度线程池来调度更新
- 使用 Ref 和 Cats 效应纤维:
然后创建了一个纯猫效应解决方案。
下面的代码会出现 StackOverflow 错误吗?
我正在尝试更新 Ref,并将 Ref 用作由另一根光纤更新的并发缓存。我正在使用递归触发纤维创建。我知道光纤可用于堆栈安全操作。在这种情况下,我将加入创建的旧光纤。所以想了解下面的代码是安全的。
更新(来自下面提供的答案的解决方案)
第三种解决方案:基于其中一个答案的输入。与其为每个递归调用分叉,不如在调用者上分叉。
很想知道上面讨论的方法的优缺点。
scala - Scala 中的局部效果和可变状态与 Cats
在使用 Scala 进行函数式编程第 14 章(局部效果和可变状态)中,作者陈述了以下内容:
我们称这个新的局部效果单子 ST,它可以代表状态线程、状态转换、状态标记或状态标记。它与 State monad 的不同之处在于它的 run 方法是受保护的,但除此之外它的结构完全相同。
总的来说,它是作用域突变的单子。
我想知道是否有一些东西可以在猫效果中实现这一点?什么是 DataType 或 TypeClass ?
postgresql - 将 akka 消息写入 doobie 作为 postgres 的接收器
当我在收到消息数据时尝试从 akka 演员写入 postgres 表时遇到问题。我不确切知道真正的问题,我认为这是异步上下文,因为当我调用一个带有一些列表数据作为参数的函数时,该函数应该将列表数据写入 postgres,而不是什么都不执行,它不会仅标记任何错误,它不执行写入功能。数据来自休息点,我使用 akka http 发出请求。
处理写入 postgres 的代码演员。编码:
code 是一个对象,它有一个写入 postgres 的函数,这个函数是从 actor 接收调用的:
错误在于:
如果有另一种方法可以做到这一点,它可能会有所帮助。