问题标签 [scalaz7]

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 回答
143 浏览

scala - 来自scalaz流io的附加方法导致无限循环

我使用来自 scalaz 流网站的这段代码,它正在使用 to 方法,但是当我尝试使用 append 时它失败了,它看起来像一个无限循环并且永远不会完成。我想使用 append 方法的原因是我不想使用 to 方法重写文件。

我对此感到困惑,有人可以向我解释这里发生了什么

提前谢谢了

0 投票
1 回答
29 浏览

scala - 测试2个定义的静态类型是否相等

假设我想出了一个组合器:

此组合器将 any 映射Kleisli[M, A, B]Kleisli[M, Option[A], Option[B].

然而,一段时间后,我意识到(诚然,在 #scalaz 上的 estewei 的帮助下)这可以与更通用的容器一起工作,而不仅仅是Option,即任何有Traverse实例的容器:

所以optional现在可以定义为:

但是,我想验证至少生成的类型签名是否等于 的原始定义optional,而我可以将鼠标悬停在我的 IDE 中的两个定义上(在我的例子中是 Ensime)并比较响应,我会就像确定它的更可靠的方法。

我试过了:

但是(显然?)由于两个标识都被认为不稳定而失败scalac

除了可能暂时object用一个apply方法制作这两个函数之外,还有什么简单的方法可以比较它们的静态类型而不依赖于 IDE 表示编译器的提示?

PS 这个名字optional来源于我使用该组合器作为验证 DSL的一部分来获取Kleisli-wrappedValidation[String, T]并将其转换为Kleisli-wrappedValidation[String, Option[T]]以验证可选值的有效性(如果存在)。

0 投票
1 回答
182 浏览

scala - 如何使用 scalaz 中的序列将 T[G[A]] 转换为 G[T[A]]

我有这段代码可以使用 scalaz 序列将 List[Future[Int]] 转换为 Future[List[Int]]。

因为我使用的是来自scalaz的Future,所以它可能有隐式解析来为我做魔法,我只是想知道类型类是否是自定义类而不是像Future这样预定义的类,我该如何定义隐式解析以达到相同的结果

提前谢谢了

0 投票
1 回答
1962 浏览

scala - 将向量转换为元组

是否可以将异构向量的向量转换为 Scala 中的 Tuple3 列表

IE

0 投票
1 回答
404 浏览

scala - 在scalaz-streams中记录和忽略Task中的异常

让我们从一些 scalaz-stream 文档中举一个例子,但有一个理论上的扭曲。

在这种情况下,文件很可能包含一些非双精度字符串,并且fahrenheitToCelsius会抛出一些NumberFormatException. 假设在这种情况下,我们可能希望记录此错误并忽略它以进行进一步的流处理。惯用的做法是什么?我见过一些例子,但它们通常collectFrom是流。

0 投票
1 回答
319 浏览

scala - Scalaz Functor typeclass 特殊符号

最近我遇到了这个Scalaz代码(例如https://github.com/scalaz/scalaz/blob/series/7.2.x/core/src/main/scala/scalaz/Functor.scala):

“函子”内的类型表达式的含义/目的是什么,即 λ[α => F[G[α]]]?到目前为止,我只看到了类型别名,例如http://like-a-boss.net/2014/09/27/type-lambda-in-scala.html

此外,Intellij Idea (14.0.3) 无法解析符号。Scalaz 在 Intellij 外部由 sbt 构建,然后导入 Intellij。知道会是什么情况吗?

0 投票
0 回答
671 浏览

scala - 在 EitherT 和 Validation 之间切换以累积错误或遍历

假设我有以下功能:

给定 a ,我可以使用以下方法List[Id]轻松检索 a :List[Thingy]Traverse[List]

它将使用将基于的Applicative实例​​,所以我只会得到第一个,它不会附加所有这些。那是对的吗?EitherTflatMapNonEmptyList[Error]

现在,如果我真的想累积错误,我可以在EitherT和之间切换Validation。例如:

它有效,最后我得到了所有错误,但这很麻烦。我可以通过使用组合使其更简单:Applicative

比其他人更长,但所有管道都可以轻松地在代码库中共享。

你觉得我的解决方案怎么样?有没有更优雅的方法来解决这个问题?你通常是如何应对的?

非常感谢。

编辑:

我有一种使用自然转换来 pimp 的疯子解决方案Traversable。您显然需要类型别名才能使其工作,这就是我重新定义的原因getRemoteThingy

0 投票
0 回答
140 浏览

stream - 使用 scalaz Traverse 类型类的内存高效流遍历

我正在尝试scala.collection.immutable.Stream使用 Scalaz'(版本 7.1.2)类型类遍历/排序大型流(例如)Traverse,但我经常遇到java.lang.OutOfMemoryError: GC overhead limit exceeded问题。

我的遍历大致如下所示:

哪里MTrans是一个单子变压器堆栈,包括EitherTandStateTf: Int => MTrans[Int]

我通常只对元素排序(传递状态)感兴趣,只需要最终结果(MTrans[Int]),而不是整个(物化)序列/流。

我有运行的版本,traverseKTrampoline但这无济于事,因为这不是StackOverflowError其他类似帖子中描述的问题。我也尝试了使用的组合,EphemeralStreamsequence没有成功。

我如何(内存)有效地遍历/排序这样的流?

更新 1

以下是我正在尝试做的更完整的示例。它与我所拥有的结构非常相似,并且表现出相同的问题(GC 开销限制在某些时候超过了)。

更新 2

基于来自 Eric 和Applicative 与 monadic 组合器以及 Scalaz 中的免费 monad 的一些输入,我使用 applicative 提出了以下foldLeft基于简单的解决方案*>

虽然这(仍然)似乎是堆栈安全的,但它需要大量的堆空间并且运行速度非常慢。

0 投票
0 回答
154 浏览

monads - 如何使用 scalaz 的 ContT monad 转换器来实现 while 循环

我试图了解如何使用ContTScalaz 7 中的 monad 转换器以功能方式实现while循环,同时防止堆栈溢出。一个说明使用的简单示例ContT将非常有帮助。

0 投票
1 回答
310 浏览

monads - Trampolining scalaz' Monad.whileM_ 以防止堆栈溢出

我正在使用 scalaz'Monad.whileM_以功能方式实现 while 循环,如下所示:

虽然这适用于 small k,但它会导致大型 StackOverflow 错误k(例如 1000000)。有没有办法蹦床whileM_或者有更好的方法来保证堆栈安全?