问题标签 [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 回答
504 浏览

scala - 用于系统测试 DSL 的实用免费单子:并发和错误处理

我正在尝试编写用于在 Scala 中编写系统测试的 DSL。在这个 DSL 中,我不想暴露某些操作可能异步发生(例如,因为它们是使用正在测试的 Web 服务实现的),或者可能发生错误(因为 Web 服务可能不可用)的事实,并且我们希望测试失败)。在这个答案中,不鼓励这种方法,但在用于编写测试的 DSL 上下文中,我并不完全同意这一点。我认为 DSL 会因为这些方面的引入而受到不必要的污染。

为了解决这个问题,请考虑以下 DSL:

现在假设我们要实现一个解释器,它利用我们的测试服务来放置和计算商店中的元素。由于我们使用网络,我希望put操作异步进行。此外,鉴于可能发生网络错误或服务器错误,我希望程序在发生错误时立即停止。为了说明我想要实现的目标,这里是一个通过 monad 转换器混合 Haskell 中不同方面的示例(我无法转换为 Scala)。

M所以我的问题是,你会为满足上述要求的解释器使用哪个 monad :

如果 M 是一个 monad 转换器,您将如何使用您选择的 FP 库(Cats、Scalaz)来组合它们。

0 投票
1 回答
876 浏览

scala - 猫无法解析符号|@|

我有以下代码,我从这里得到的:http: //underscore.io/blog/posts/2015/06/10/an-introduction-to-cats.html

但是,我得到:

我的build.sbt

还有什么我应该导入或使用的吗?

0 投票
3 回答
97 浏览

scala - 为更高种类的接口生成适配器

我经常发现自己处于这样一个场景中,我定义了这样的接口:

然后,我编写了几个不同的实现,每个实现都在对特定实现最有意义的 Higher Kinded Type 上键入:

所有实现都是完全有效的,都返回包装在特定更高种类类型中的结果。

然后我经常来写一些业务逻辑,假设在我正在使用的逻辑块中Future用作上下文,我可能会写这样的东西:

上面的代码可以很好地工作,FooImpl2但是其他实现不能直接插入。在这种情况下,我总是写简单的适配器:

编写适配器很好,但它涉及很多样板,特别是对于具有大量功能的接口;更重要的是,每种方法对每种方法都得到完全相同的适应处理。我真正想做的是lift现有实现的适配器实现,只在适配机制中指定一次。

我想我希望能够写出这样的东西:

所以我可以像这样使用它:

问题是:我该如何编写generateAdapterFn函数?

我不确定如何解决这个问题,或者我的问题是否有其他常见模式或解决方案。我怀疑要编写generateAdapterFn我想要的函数,我需要编写一个宏?如果是这样,那该怎么做?

0 投票
1 回答
2879 浏览

scala - Dotty 将如何改变 Scala 中的纯函数式编程?

在2013 年的这个问题中,Odersky 先生指出,“现在说”像 Scalaz 这样的库是否能够在 Dotty 下存在(至少在当前状态下)还为时过早,因为对高等和存在主义类型的阉割。

随着时间的流逝,Dotty 对 Scalaz & Cats 的影响是否已经阐明?内置效果器和记录等提议的功能会改变这些项目的范围吗?

我知道 Dotty 距离取代 scalac 仍有一段距离,但由于我正在考虑投入时间将纯功能结构和方法应用于我的工作,我认为考虑其旗舰库的未来很重要。

0 投票
1 回答
141 浏览

scala - 堆叠免费单子

我正在学习 Free monad,并且我在 Scala 中整理了一个简单的示例,在其中我使用它们来定义两种特定于域的语言。

第一个 monad 处理存储库的副作用。我已经实现了一个解释器,它使用 state monad 来管理状态,但在实际程序中我会使用数据库。

第二个单子处理 IO。

然后,我可以把这两个“程序”放在一起

并运行他们做

我知道这远非理想,我想编写一个程序和一个支持的解释器:

所以问题是:

  1. 如何将两个单子堆叠在一起成为“完整程序”
  2. 如何将两个解释器组合成一个新的解释器?
  3. 如何处理返回的 Option[Todo] find,然后传递给 represent
0 投票
1 回答
2084 浏览

scala - 如何将 Either[Future[A], Future[B]] 转换为 Future[Either[A, B]]

我有一个实例,Either[Future[A], Future[B]]我想将其转换为Future[Either[A, B]].

自从我上一个问题以来,cats 0.8.1已经发布,改变了库的结构并放弃Xor了支持Either,这在 2.12 中是偏右的。

因此,先前接受的答案中描述的方法不再起作用。我试图找到合适的进口但失败了。

看起来似是而非,但不幸的是不起作用。编译仍然失败value bisequence is not a member of Either[scala.concurrent.Future[A],scala.concurrent.Future[‌​B]]

将导入范围扩大到*.all._不会改变编译器错误。

我在 scala 2.11.8 上,因为并非该项目所依赖的所有库都发布了 2.12 版本

0 投票
0 回答
208 浏览

scala - Cats Free foldMap 未找到隐式 Monad

我有一个自然转换的解释器MyADT ~> MyState

我什么时候都没有问题type MyState[A] = State[MyClass, A]。但是,如果我有type MyState[A] = State[MyClass, M[A]],其中 M 是任何单子,那么我会收到错误:could not find implicit value parameter M: cats.Monad[MyState]调用foldMap.

问题是什么?

0 投票
2 回答
2220 浏览

scala - 在 Scala Cats Validated 中,如何组合有序验证

https://gist.github.com/satyagraha/897e427bfb5ed203e9d3054ac6705704中,我发布了一个看似合理的 Scala Cats 验证场景,但我还没有找到一个非常简洁的解决方案。

本质上,有一个两阶段验证,其中验证各个字段,然后调用可能由于内部检查而抛出的类构造函数(通常这可能不在我的控制范围内更改,因此是异常处理代码)。如果任何字段验证失败,我们希望不调用构造函数,但也希望将任何构造函数失败合并到最终结果中。“快速失败”绝对适合两阶段检查。

这是一种flatMap问题,cats.data.Validated框架似乎通过cats.data.Validated#andThen操作来处理。但是,正如您在代码中看到的那样,我找不到一个特别巧妙的解决方案。a 上可用的操作数量非常有限cats.syntax.CartesianBuilder,我不清楚如何将它与andThen操作联系起来。

欢迎任何想法!请注意,有一个 Cats 问题https://github.com/typelevel/cats/issues/1343可能是相关的,不确定。

0 投票
1 回答
432 浏览

scala - 在 Scala (cats 或 scalaz) 中转换函子 (F[A] => G[A])

Cats 或 Scalaz 中是否有在不同容器类型之间转换的类型类?例如

  • 选项 ~> 试试
  • 尝试~>未来
  • 试试~>要么
  • 选项 ~> 列表

似乎FunctionK/ ~>/NaturalTransformation可能是我正在寻找的东西,但是没有为它们定义任何实例,我不知道为什么。

0 投票
1 回答
962 浏览

scala - Cats Monad 变形金刚

我正在尝试学习如何在猫库中使用 MonadTransformers 嵌套 monad。

所以我正在尝试为 Either[String, Option[A]] 构建一个数据类型

这是我写的代码

但我得到一个错误

我从一个正在使用的样本中获取了这个,Xor但我猜想最新的猫库已被删除Xor以支持 Either。