问题标签 [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 - 喷雾编组cats.data.Xor
我正在使用喷雾编写 REST api,并且在 json 编组方面遇到了一些困难。我的服务返回cats.data.Xor[Failure, Success]。如何从 REST 端点返回此数据类型?如何为此编写响应编组器?
scala - Scala 与 Cats - 笛卡尔 + 验证
我正在自己做一个简单的练习Advanced scala with cats
。
我想Cartesian
与Validated
.
我完全一无所知。有什么提示吗?我越来越 :
could not find implicit value for parameter instance: cats.Cartesian[Result]
Cartesian[Result].product(
^
scala - 优化自由单子
如果我有一个 value a: Free[Op, A]
,是否可以“展平”结构,a
以便Op
由自由 monad 绑定在一起的两个 s 可以折叠成一个?
上下文:我想在解释之前将其作为优化步骤执行,因为它的语义Op
是它的操作是幂等的。因此,如果两个“连续”出现,则可以在不影响程序语义的情况下消除第二个。
scala - 在 Scala 中查找集合中的第一个定义项
给定一个集合coll: C[A]
和一个函数,Scala 中的惯用方式是在不评估整个集合的情况下获取定义的f: A => Option[B]
第一项?coll
f
这是我的预期签名:
一种天真的方法coll.flatMap(f).headOption
会评估整个系列。我们可以做coll.view.flatMap(f).headOption
,或者coll.collectFirst(Function.unlift(f))
在标准库、函数式编程文献或 scalaz/cats 中还有其他东西可以让我这样做吗?
scala - 在 Scala+Cats 中使用带有 Free Monads 的任意树
我正在为语法创建一个库,它将有 2 种不同的解释:1)基于语法解析字符串 2)以语法定义的语言生成字符串。
该库使用猫将语法的 AST 创建为自由单子。然而,它似乎不是完美的选择,因为自由单子创建了一个类似于列表的 AST 表示,这对于语句列表来说非常好,但是语法远离语句列表,更接近于任意树结构。
我设法通过使用~
运算符表示连接的 2 个语法来实现我的树。AST 是一个本身就是任意 AST 的语法列表。
我的问题是:在自由单子中递归 AST 子树的好方法是什么?
我当前的实现在这里:
特别注意,该Multi
案例使用不安全递归(即不是尾递归)来递归解释子树。有一个更好的方法吗?
scala - 如何用猫 + 纪律测试类似函数的 Monad
我创建了一个类似于 Play JsonReads[T]
类型的 Monad 类型,称为ReadYamlValue
.
我为此创建了一个 catMonad
实例:
然后我想用MonadLaws
ScalaCheck 来测试它。
但我得到:
我如何定义Eq
什么是有效的功能?比较函数的相等性似乎不是我想要的......我的ReadYamlValue
类不是 Monad 甚至是 Functor 吗?
一种方法是生成任意样本并比较结果的相等性:
但这似乎有点回避平等的定义。有没有更好或更规范的方法来做到这一点?
scala - Free monad - 使用猫的嵌套 Coproduct 隐式注入
假设我要使用三个 DSL:
最终组成是:
要使用它,我需要适当的Inject
实例(我相信我应该能够隐含地获得它,因为它只有两个 DSL 和一个副产品):
这编译得很好。但是在运行时它们都是null
.
// 编辑:
上面的问题似乎将这些 val 标记为implicit
(这会导致递归解析)。删除implicit
后似乎显示正确的错误,即:
错误:(28, 36) 不明确的隐式值:类型 => scala.collection.generic.CanBuildFrom[String,Char,String] 的对象 Predef 中的值 StringCanBuildFrom 和类型 [A]=> 的对象 Predef 中的方法 $conforms :<[A,A] 匹配预期类型 T def inj1: Inject[Test1Op, Api] = 隐式
和
错误:(28, 36) 找不到参数 e 的隐式值:T def inj1: Inject[Test1Op, Api] = 隐式
和
错误:(28, 36) 类型不匹配;找到:所需单位:cats.free.Inject[com.example.Test1Op,com.example.Hello.Api] def inj1: Inject[Test1Op, Api] = 隐式
scala - 猫 Seq[Xor[A,B]] => Xor[A, Seq[B]]
我有一系列错误或视图 ( Seq[Xor[Error,View]]
)
我想将其映射到第一个错误(如果有)的 Xor 或视图序列 ( Xor[Error, Seq[View]]
) 或可能只是 ( Xor[Seq[Error],Seq[View]
)
我怎样才能做到这一点?
scala - Semigroup和SemigroupK之间的区别
Semigroup
在猫中有 2 个半群类型类:SemigroupK
后者用于类型构造函数。我看不到后者比前者的优势。如果我查看他们提供的列表实例Monoid
(尽管有 a MonoidK
),而NonEmptyList
提供的是SemigroupK
. 请注意,NonEmptyList
它还Semigroup
通过以下方法提供:
为什么会出现差异?
然后似乎大多数半组操作仅在而不Semigroup
可用SemigroupK
(有但这是我看到的唯一一个,它委托给哪个工作 on )。reduceK
Reducible
reduce
Semigroup
那么,给定一个 type T[_]
,同时拥有 aSemigroupK[T]
和a会得到Semigroup[T[A]] for some A
什么?
编辑
现在有一个删除 MonoidK 和 SemigroupK 的问题:https ://github.com/typelevel/cats/issues/1932
scala - 在没有样板代码的情况下遍历/折叠Scala中的嵌套案例类
我有一些用于 sum 和 product 类型混合的案例类:
我想用这种Top
结构做一些类似折叠的操作。示例包括:
- 计算出现次数
BadLeaf
GoodLeaf
将s中的所有值相加
这是一些执行操作的代码:
我正在处理的现实生活结构比我编造的例子要复杂得多。是否有任何技术可以帮助我避免编写大量样板代码?
我已经将该cats
库作为依赖项,因此首选使用该库的解决方案。为了解决这个问题,我愿意包含新的依赖项。
对于我的特定示例,定义不是递归的,但我有兴趣看到一个也适用于递归定义的解决方案。