问题标签 [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 - How to define local method on top of a monad transformer stack in Scala cats
I have a monad transformer stack on top of a Kleisli defined as:
and I want to define a local
method with the following signature:
Is it possible?
I know that there is a local
method in MonadReader
with the signature:
So the simplest solution would be to obtain the MonadReader
implicit from S
, however, I could not find how to do it.
A simple snippet of my code would be the following:
scala - 将此一元计数器从 Haskell 转换为 Scala
我在 Haskell 中定义了一个 monadic 计数器,我正试图将其转换为 Scala,但到目前为止失败得很惨。简而言之,问题是将计数器实现为状态 monad,它从环境中读取计数器增量常量,并记录计数器的历史记录(其值序列)。
我的一个朋友改进了我的解决方案,并提出了这个简单的解决方案:
我尝试将其编码为 Scala + (Cats | ScalaZ),但没有成功。Cats的最新稳定版本缺少lift
. WriterT
并且ReaderWriterState
在Scalaz
几个小时内我无法弄清楚如何使用该local
方法。而这仅仅是开始......
这个 Haskell 解决方案如何以简单而优雅的方式翻译?(在语言允许的范围内)。
边注:
我仍在试图弄清楚为什么我需要花费这么多时间将简单的解决方案从 Haskell 转换为 Scala + FP 库(Cats、Scalaz)。在 Haskell 中查找每个类型类的实例和可用函数是一件轻而易举的事,在使用 IntelliJ、GitHub 和 StackOverflow 的 Scala 中,这需要我几天的时间。所以我想知道我做错了什么,我该如何改善这种情况。
scala - 如何使用 Poly 函数修复此编译错误
我正在尝试将一个HList
of映射Xor
到一个HList
ofValidatedNel
并得到一个错误:
上面的代码有什么问题以及如何修复它?
scala - 了解半群。函数式编程。斯卡拉
很容易阅读和理解 Semigroup 的代数是什么。但是对于具有命令式语言背景的软件开发人员来说,这仍然是一个模糊的概念。不幸的是,我的研究更多地关注指针而不是抽象代数,所以现在我的大脑几乎被命令式思维所感染......问题是我知道定义但我不明白。我想在哪里、何时以及为什么创建/提供/使用半组仍然不是很明显?!
由于一般定义(... Semigroup 可以将事物组合在一起...)没有很好地解释用法,请您以问题解决方案的形式提供现实世界的示例吗?
在答案中,请尽可能包括以下方面:- 使用
append
/combine
函数 - 组成半群
- 有什么
def apply: Apply[λ[α => F]]
作用 - (这些来自spire-math - 一个猫所依赖的库)
AdditiveSemigroup[A]
MultiplicativeSemigroup[A]
CommutativeSemigroup[A]
AdditiveCommutativeSemigroup[A]
MultiplicativeCommutativeSemigroup[A]
Band[A]
- 这是幂等半群
- 上面提到的用途是什么
- 你使用什么依赖于半组的函数/组合器(可能是函数形式,
def f[A: Semigroup)(a: A) ...
所以他们认为Semigroup
是类型类并使用它的行为) - 您知道哪些半群以及它们在上述函数的上下文中的行为方式
- [其他方面因为我没看懂题目所以没能提到]
热烈欢迎所有(部分)答案!:)
来自scalaz和cats的 Semigroup 特征的合并片段:
scala - 将 'A => F[G[B]]' 转换为 'F[G[A=>B]'
给定一个带有签名的函数:A => F[G[B]]
. F
和G
类型有 monads 实例。
是否可以将其转换为带有签名的东西:F[G[A=>B]
?这种转变有什么通用名称吗?
换句话说,将执行prettify2
什么?
更新:我很感激使用猫或 scalaz 的答案。
scala - 如何使用规则测试 Monad 实例
给定一个Fun
类型的单子
问题是:人类如何使用学科库来测试这个 Monad 实例是否遵守 Monad Laws?
以下是部分结果,由于编译器找不到隐式 for CartesianTests.Isomorphisms[FUN]
而失败。
scala - Scala Cats:迭代一个自由单子的结果并为每个结果执行一个自由单子操作
可以说我有以下免费的单子定义:
现在我想检索所有集合名称,然后为每个集合名称执行 idsFromSet 操作。
我会这样描述它:
但这是不可能的,因为单子不能混入理解中。所以在'setName <- allSetNames'这一行上,编译器抱怨它被赋予了一个Set并且它想要一个Free。
通过环顾四周,单子变压器似乎是要走的路。但是有了这些信息,我真的迷失了,因为我能找到的带有 monad 转换器的示例似乎与我的示例相距太远,或者解释太抽象而无法在此示例中实现。因此,我们将不胜感激。
编辑:我更进一步,可以通过这样做来实现我的结果(我也意识到我想要扁平的 id,而不是 id 的集合):
scala - 定义一个依赖于自身的 Semigroup 实例
... 或者 Haskell 程序员不得不编写 Scala 代码的事故,第 5 部分。
我在 Scala 中有以下结构:
而且,使用 Cats,我想定义Semigroup
它的一个实例。
这将导致以下错误:
所以,我的猜测是,由于我正在为Semigroup
Scala 编译器定义实例,因此无法派生Semigroup
of的实例Map[String, ResourceTree]
。这似乎得到了证实,因为编译了以下实例:
我真的希望我错了,因为如果这是在 Scala 中为 Semigroup 定义实例的正确方法,我将开始考虑放弃用这种语言做 FP 的想法。
有没有更好的办法?
scala - 为什么 Scala 编译器看不到这个隐式实例
我定义了以下方法:
如您所见,我需要使用 |+| 的方法Semigroup
,在 Cats 库中定义。我已经定义Semigroup
了for的一个实例ResourceTree
,但是,使用带注释的 import 导入它不起作用(|+|
找不到运算符)。以上dummyInstance
解决了问题,但这看起来不正确。
关于为什么此导入未启动实例的任何想法?