问题标签 [scala-cats]
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 - 如何将 Seq[Either[A,B]] 减少为 Either[A,Seq[B]]?
Seq[Either[String,A]]
给定一个带有Left
错误消息的序列。如果序列Either[String,Seq[A]]
的所有元素都是. 如果至少有一个(错误消息),我想获得第一条错误消息或所有错误消息的串联。Right
Seq[A]
Right
Left
当然,您可以发布猫或 scalaz 代码,但我也对不使用它的代码感兴趣。
编辑
我已经更改了标题,它最初要求一个Either[Seq[A],Seq[B]]
来反映消息的正文。
scala - 在 Scala 中避免深度嵌套的选项级联
假设我有三个数据库访问函数foo
, bar
, 并且baz
每个都可以返回Option[A]
某个A
模型类的位置,并且调用相互依赖。
我想按顺序调用函数,并且在每种情况下,如果找不到值(None
),则返回适当的错误消息。
我当前的代码如下所示:
可以看出,代码嵌套严重。
相反,如果我使用for
理解,我不能给出具体的错误信息,因为我不知道哪一步失败了:
如果我使用map
and getOrElse
,我最终得到的代码几乎和第一个示例一样嵌套。
这些是一种更好的结构方式来避免嵌套,同时允许特定的错误消息吗?
scalaz - 如何在没有副作用的情况下在 Scala 中实现 Fisher-Yates shuffle?
STArray
我想通过使用局部突变效果和功能随机数生成器来实现没有副作用的 Fisher-Yates 算法(就地数组洗牌)
产生算法所需的随机整数。
我有一种方法def intInRange(max: Int): RNG[Int]
可以用来Int
在 [0,max) 中产生随机数。
来自维基百科:
我想我需要以某种方式堆叠State
,ST
但这让我感到困惑。我需要一个[S]StateT[ST[S,?],Seed,A]
吗?我是否也必须重写RNG
才能使用StateT
?
(编辑)我不想参与IO
,也不想替代Vector
,STArray
因为洗牌不会就地执行。
我知道这里有一个 Haskell 实现,但我目前无法理解并将其移植到 Scalaz。但也许你可以?:)
提前致谢。
scala - Scala - JSON 对象在字段类型上是多态的
我正在尝试解码一些真正可怕的 JSON。每个对象的类型信息都在标记为type
ie"type": "event"
等的字段中编码。我使用Circe进行 JSON 编码/解码。该库使用类型类,其中相关的类型类是def apply(c: HCursor): Decoder.Result[A]
. 问题是任何解码器对类型都是不变的,A
. 这是一个具体的例子
解码工作正常,但MotherEvent
总是返回
当然,我希望有一个 FlightEvent 而不是母事件。一种可能的解决方案是创建一个具有 60 或 70 个字段的“母亲”类型,但我已经讨厌自己并且想退出编程,只考虑Option[A]
基于字段填充的70 个字段type
。
谁能想到一个好的解决方案?
scala - 在 Cats 中,@op 参数列表是否最多有 2 个参数?
我对 Cats 中的 simulacrum 中的 @typeclass 是什么有点好奇。
这是来自 doc 的示例,它运行良好且有意义。
但是,如果列表中有 3 个参数,我不知道 3 个参数如何适用于 @op。据我了解,半群是两个参数的组合。但是,编译并没有抱怨任何错误,所以我想知道应该将@op 宏改进为只接受 2 个参数,或者如何为@op 使用更多的 3 个参数。
scala - 猫的拟像中的@noop 是什么
猫的@noop 注释是什么。基本上,它不接受像@op 这样的任何字符串别名。这是它的 scala 文档
我对这个文档感到困惑。有人可以向我解释并给我一个关于如何使用它的例子吗?
提前谢谢了
scala - 在 NonEmptyList 上折叠
我正在尝试猫库,但我很难在我应该导入和创建的东西之间导航。我的问题如下:
这是我想要使用的数据结构。每个违规行为都应作为对象与 msg 一起保存,通过的检查可以聚合以仅保存 id。
最后fold
导致编译错误。
NonEmptyList
应该是折叠的更好候选人。验证的组合也应该在那里。至于我的类,ChechViolation
是 inNonEmptyList
所以它不需要一个 monoid 实例。对于ChecksPassed
我已经创建了一个幺半群实例,所以我并没有真正得到这里缺少的东西。
编辑
我没有包括我的进口,它们在这里很重要:
scala - 在 Scala 中的 Free Monad 中堆叠 monadic 效果
我正在学习 Scala 中的 Free monad,并且我整理了一个简单的代数示例,我可以使用猫将其提升为 Free monad。
这是我的代数
我可以像这样使用它
从ConsultationOp
to的提升Free
是隐式执行的。
(缺少很多细节,完整的工作实现在这里:https ://github.com/gabro/free-api )
到目前为止一切顺利,但是如果我需要提取consultation.Get
.
首先想到的是一个单子变换器,即类似
但它看起来很丑,而且感觉不对。
使用 Free monad 时堆叠 monadic 效果的美化方式(如果有的话)是什么?
scala - 扩展副产品的自然转化
我有
~>
在哪里cats.NaturalTransformation
。
我能够构建一个
使用kind-projector语法以提高可读性
这就是我的做法
这可行,尽管我愿意接受建议,因为它看起来并不漂亮。
现在,如果我有
我也应该能够构建一个
这就是我卡住的地方。我尝试ExtendRight
从 shapeless 使用,但我无法让它工作。这是我的尝试:
}
但是编译器找不到ExtendRight
参数的隐含证据。
这是一个可以玩的 MWE