问题标签 [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.

0 投票
1 回答
64 浏览

scala - 喷雾编组cats.data.Xor

我正在使用喷雾编写 REST api,并且在 json 编组方面遇到了一些困难。我的服务返回cats.data.Xor[Failure, Success]。如何从 REST 端点返回此数据类型?如何为此编写响应编组器?

0 投票
1 回答
849 浏览

scala - Scala 与 Cats - 笛卡尔 + 验证

我正在自己做一个简单的练习Advanced scala with cats

我想CartesianValidated.


我完全一无所知。有什么提示吗?我越来越 :

could not find implicit value for parameter instance: cats.Cartesian[Result] Cartesian[Result].product( ^

0 投票
1 回答
321 浏览

scala - 优化自由单子

如果我有一个 value a: Free[Op, A],是否可以“展平”结构,a以便Op由自由 monad 绑定在一起的两个 s 可以折叠成一个?

上下文:我想在解释之前将其作为优化步骤执行,因为它的语义Op是它的操作是幂等的。因此,如果两个“连续”出现,则可以在不影响程序语义的情况下消除第二个。

0 投票
3 回答
274 浏览

scala - 在 Scala 中查找集合中的第一个定义项

给定一个集合coll: C[A]和一个函数,Scala 中的惯用方式是在不评估整个集合的情况下获取定义的f: A => Option[B]第一项?collf

这是我的预期签名:

一种天真的方法coll.flatMap(f).headOption会评估整个系列。我们可以做coll.view.flatMap(f).headOption,或者coll.collectFirst(Function.unlift(f))在标准库、函数式编程文献或 scalaz/cats 中还有其他东西可以让我这样做吗?

0 投票
1 回答
388 浏览

scala - 在 Scala+Cats 中使用带有 Free Monads 的任意树

我正在为语法创建一个库,它将有 2 种不同的解释:1)基于语法解析字符串 2)以语法定义的语言生成字符串。

该库使用猫将语法的 AST 创建为自由单子。然而,它似乎不是完美的选择,因为自由单子创建了一个类似于列表的 AST 表示,这对于语句列表来说非常好,但是语法远离语句列表,更接近于任意树结构。

我设法通过使用~运算符表示连接的 2 个语法来实现我的树。AST 是一个本身就是任意 AST 的语法列表。

我的问题是:在自由单子中递归 AST 子树的好方法是什么?

我当前的实现在这里:

特别注意,该Multi案例使用不安全递归(即不是尾递归)来递归解释子树。有一个更好的方法吗?

请点击这里查看源代码。

0 投票
1 回答
315 浏览

scala - 如何用猫 + 纪律测试类似函数的 Monad

我创建了一个类似于 Play JsonReads[T]类型的 Monad 类型,称为ReadYamlValue.

我为此创建了一个 catMonad实例:

然后我想用MonadLawsScalaCheck 来测试它。

但我得到:

我如何定义Eq什么是有效的功能?比较函数的相等性似乎不是我想要的......我的ReadYamlValue类不是 Monad 甚至是 Functor 吗?

一种方法是生成任意样本并比较结果的相等性:

但这似乎有点回避平等的定义。有没有更好或更规范的方法来做到这一点?

0 投票
1 回答
412 浏览

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] = 隐式

0 投票
2 回答
1146 浏览

scala - 猫 Seq[Xor[A,B]] => Xor[A, Seq[B]]

我有一系列错误或视图 ( Seq[Xor[Error,View]])

我想将其映射到第一个错误(如果有)的 Xor 或视图序列 ( Xor[Error, Seq[View]]) 或可能只是 ( Xor[Seq[Error],Seq[View])

我怎样才能做到这一点?

0 投票
1 回答
290 浏览

scala - Semigroup和SemigroupK之间的区别

Semigroup在猫中有 2 个半群类型类:SemigroupK后者用于类型构造函数。我看不到后者比前者的优势。如果我查看他们提供的列表实例Monoid(尽管有 a MonoidK),而NonEmptyList提供的是SemigroupK. 请注意,NonEmptyList它还Semigroup通过以下方法提供:

为什么会出现差异?

然后似乎大多数半组操作仅在而不Semigroup可用SemigroupK(有但这是我看到的唯一一个,它委托给哪个工作 on )。reduceKReduciblereduceSemigroup

那么,给定一个 type T[_],同时拥有 aSemigroupK[T] a会得到Semigroup[T[A]] for some A什么?

编辑

现在有一个删除 MonoidK 和 SemigroupK 的问题:https ://github.com/typelevel/cats/issues/1932

0 投票
1 回答
457 浏览

scala - 在没有样板代码的情况下遍历/折叠Scala中的嵌套案例类

我有一些用于 sum 和 product 类型混合的案例类:

我想用这种Top结构做一些类似折叠的操作。示例包括:

  • 计算出现次数BadLeaf
  • GoodLeaf将s中的所有值相加

这是一些执行操作的代码:

我正在处理的现实生活结构比我编造的例子要复杂得多。是否有任何技术可以帮助我避免编写大量样板代码?

我已经将该cats库作为依赖项,因此首选使用该库的解决方案。为了解决这个问题,我愿意包含新的依赖项。

对于我的特定示例,定义不是递归的,但我有兴趣看到一个也适用于递归定义的解决方案。