问题标签 [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.
scala - 来自scalaz流io的附加方法导致无限循环
我使用来自 scalaz 流网站的这段代码,它正在使用 to 方法,但是当我尝试使用 append 时它失败了,它看起来像一个无限循环并且永远不会完成。我想使用 append 方法的原因是我不想使用 to 方法重写文件。
我对此感到困惑,有人可以向我解释这里发生了什么
提前谢谢了
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]]
以验证可选值的有效性(如果存在)。
scala - 如何使用 scalaz 中的序列将 T[G[A]] 转换为 G[T[A]]
我有这段代码可以使用 scalaz 序列将 List[Future[Int]] 转换为 Future[List[Int]]。
因为我使用的是来自scalaz的Future,所以它可能有隐式解析来为我做魔法,我只是想知道类型类是否是自定义类而不是像Future这样预定义的类,我该如何定义隐式解析以达到相同的结果
提前谢谢了
scala - 将向量转换为元组
是否可以将异构向量的向量转换为 Scala 中的 Tuple3 列表
IE
scala - 在scalaz-streams中记录和忽略Task中的异常
让我们从一些 scalaz-stream 文档中举一个例子,但有一个理论上的扭曲。
在这种情况下,文件很可能包含一些非双精度字符串,并且fahrenheitToCelsius
会抛出一些NumberFormatException
. 假设在这种情况下,我们可能希望记录此错误并忽略它以进行进一步的流处理。惯用的做法是什么?我见过一些例子,但它们通常collectFrom
是流。
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。知道会是什么情况吗?
scala - 在 EitherT 和 Validation 之间切换以累积错误或遍历
假设我有以下功能:
给定 a ,我可以使用以下方法List[Id]
轻松检索 a :List[Thingy]
Traverse[List]
它将使用将基于的Applicative
实例,所以我只会得到第一个,它不会附加所有这些。那是对的吗?EitherT
flatMap
NonEmptyList[Error]
现在,如果我真的想累积错误,我可以在EitherT
和之间切换Validation
。例如:
它有效,最后我得到了所有错误,但这很麻烦。我可以通过使用组合使其更简单:Applicative
比其他人更长,但所有管道都可以轻松地在代码库中共享。
你觉得我的解决方案怎么样?有没有更优雅的方法来解决这个问题?你通常是如何应对的?
非常感谢。
编辑:
我有一种使用自然转换来 pimp 的疯子解决方案Traversable
。您显然需要类型别名才能使其工作,这就是我重新定义的原因getRemoteThingy
:
stream - 使用 scalaz Traverse 类型类的内存高效流遍历
我正在尝试scala.collection.immutable.Stream
使用 Scalaz'(版本 7.1.2)类型类遍历/排序大型流(例如)Traverse
,但我经常遇到java.lang.OutOfMemoryError: GC overhead limit exceeded
问题。
我的遍历大致如下所示:
哪里MTrans
是一个单子变压器堆栈,包括EitherT
andStateT
和f: Int => MTrans[Int]
。
我通常只对元素排序(传递状态)感兴趣,只需要最终结果(MTrans[Int]
),而不是整个(物化)序列/流。
我有运行的版本,traverseKTrampoline
但这无济于事,因为这不是StackOverflowError
其他类似帖子中描述的问题。我也尝试了使用的组合,EphemeralStream
但sequence
没有成功。
我如何(内存)有效地遍历/排序这样的流?
更新 1
以下是我正在尝试做的更完整的示例。它与我所拥有的结构非常相似,并且表现出相同的问题(GC 开销限制在某些时候超过了)。
更新 2
基于来自 Eric 和Applicative 与 monadic 组合器以及 Scalaz 中的免费 monad 的一些输入,我使用 applicative 提出了以下foldLeft
基于简单的解决方案*>
:
虽然这(仍然)似乎是堆栈安全的,但它需要大量的堆空间并且运行速度非常慢。
monads - 如何使用 scalaz 的 ContT monad 转换器来实现 while 循环
我试图了解如何使用ContT
Scalaz 7 中的 monad 转换器以功能方式实现while
循环,同时防止堆栈溢出。一个说明使用的简单示例ContT
将非常有帮助。
monads - Trampolining scalaz' Monad.whileM_ 以防止堆栈溢出
我正在使用 scalaz'Monad.whileM_
以功能方式实现 while 循环,如下所示:
虽然这适用于 small k
,但它会导致大型 StackOverflow 错误k
(例如 1000000)。有没有办法蹦床whileM_
或者有更好的方法来保证堆栈安全?