问题标签 [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 析取中合并不相关的失败案例的类型类
我对 Scalaz 析取有一个理解。这些左侧的类型可以是来自其他库的不同类型的错误案例类。例如,一种失败情况可能是由于 HTTP 超时,而另一种可能表示 Play 中的 Json 解析错误。
有没有一种方法可以使用某种形式的类型类来声明“这 4 个类/特征都是这种类型的错误”,而实际上并不让它们继承自一个共同的特征?如果这确实存在,则还需要能够在 for 理解中进行推断。
scala - 使用 scalaz 流并行处理多个文件
我正在尝试使用scalaz-stream
同时处理多个文件,将单个函数应用于文件中的每一行,跨越所有文件。具体来说,假设我有一个接受字符串列表的函数
还有几个文件,第一个:
第二:
整个过程的结果应该是:
(或者更有可能直接写入其他文件)
事先不知道文件的数量,并且不同文件之间的行数可能会有所不同,但是我可以使用默认值填充(在运行时)较短文件的末端,或者删除较长的文件。
所以本质上,我需要一种方法将 a Seq[Process[Task, String]]
(通过类似的东西获得io.linesR
)组合成一个Process[Task, Seq[String]]
.
实现这一目标的最简单方法是什么?
或者,更一般地说,我如何将n
实例组合Process[F, I]
成一个实例Process[F, Seq[I]]
?
我确信为此目的有一些标准组合器,但我无法弄清楚......
谢谢。
json - Scalaz 树到 JSON
我目前正在尝试使用Tree
该类从数据库查询中构建树结构。之后我想将其转换为 json 对象(使用 playframework api)。
该类的一些示例或更多文档Tree
会很棒。我无法理解draw
anddrawTree
方法,这可能会做类似的事情。
例子
这应该会产生一个像这样的 json 树
sbt - 如何修复 sbt 的 [警告] 跳过生成 '' 依赖?
当我makePom
在 sbt 中运行时,我得到:
解决此问题以便生成正确的排除项的最简单方法是什么?
以下不起作用- 它违反了 scalaz 排除规则 - 我认为是因为 scalaz 7 由多个 jar 组成:
和
scala - Scalaz 7 中从 Traversable 到 Foldable 的隐式转换
Scalaz 7.x 中定义的从 ascala.collection.Traversable[A]
到 a的隐式转换在哪里?scalaz.Foldable[A]
标准进口
不包括它。
曾经有一个implicit def TraversableFoldable[]...
定义在scalaz/Foldable.scala
,但是
相关的隐式曾在 中定义scalaz/Foldable.scala
,但已移至
scalaz.std.traversable
虽然不存在。也许这是一个偶然的遗漏?
FWIWscalaz.std.list
包含在标准导入中,因此 aList[A]
转换为Foldable[A]
. scalaz.std.iterable
不在标准导入中,必须显式导入。Iterable[A]
才能Foldable[A]
隐式转换。
scala - 状态单子在恒定空间(堆和堆栈)中的单子折叠?
是否可以在状态单子中以恒定的堆栈和堆空间执行折叠?还是一种不同的功能技术更适合我的问题?
接下来的部分描述了这个问题和一个激励用例。我正在使用 Scala,但也欢迎使用 Haskell 中的解决方案。
折叠在State
单子中填满了堆
假设 Scalaz 7。考虑状态单子中的单子折叠。为了避免堆栈溢出,我们将蹦床折叠。
对于大型集合col
,这将填满堆。
我相信在折叠过程中,会为集合(x: R
参数)中的每个值创建一个闭包(一个 State mobit),填充堆。在执行之前,这些都不能被评估run 0
,提供初始状态。
可以避免这种 O(n) 堆使用吗?
更具体地说,是否可以在折叠之前提供初始状态,以便 State monad 可以在每次绑定期间执行,而不是嵌套闭包以供以后评估?
或者可以构造折叠以便在 State monad 之后延迟执行run
?这样,在前一个x: R
闭包被评估并适合垃圾收集之前,不会创建下一个闭包。
或者这种工作有更好的功能范式吗?
示例应用程序
但也许我使用了错误的工具来完成这项工作。示例用例的演变如下。我在这里走错路了吗?
考虑水库采样,即k
从一个太大而无法放入内存的集合中一次性挑选一个统一的随机项目。在 Scala 中,这样的函数可能是
如果拉皮条到TraversableOnce
类型可以这样使用
所做的工作sample
本质上是fold
:
但是,update
是有状态的;这取决于n
, 已经看到的项目数量。(它也依赖于一个 RNG,但为了简单起见,我假设它是全局的和有状态的。用于处理的技术将很容易n
扩展。)。那么如何处理这种状态呢?
不纯的解决方案很简单,并且以恒定的堆栈和堆运行。
但是纯粹的功能解决方案呢? update
必须n
作为附加参数并返回新值以及更新的样本。我们可以n
在隐式状态中包含折叠累加器,例如,
但这掩盖了意图;我们只是真的打算累积样本向量。这个问题似乎已经为 State monad 和 monadic left fold 做好了准备。让我们再试一次。
我们将使用带有这些导入的 Scalaz 7
并在 a 上操作Iterable[A]
,因为 Scalaz 不支持 a 的单子折叠Traversable
。
sample
现在定义
更新在哪里
不幸的是,这会破坏大型集合的堆栈。
所以让我们蹦床吧。sample
就是现在
更新在哪里
这修复了堆栈溢出,但仍然会破坏非常大的集合(或非常小的堆)的堆。在折叠期间为集合中的每个值创建一个匿名函数(我相信关闭每个x: A
参数),甚至在蹦床运行之前消耗堆。(FWIW,State 版本也有这个问题;堆栈溢出首先出现在较小的集合中。)
scala - 当 Disjunction 是最外层的容器时,如何使用 Monad Transformer?
这里的问题是析取\/[A, B]
有 2 个泛型,因此不是 Monad。当我制作类型别名时
它成功了,因为我已经固定了左侧,现在我有了 Monad。如果最外面的类型是析取,我怎样才能让我的 Monad Transformer 工作,而不使用类型别名?
scala - 带有块和 zipWithIndex 的 scalaz-stream 中令人费解的行为
我正在尝试使用具有昂贵操作的 scalaz-stream 处理数据流※。
※是的,是的,我知道在代码中混入副作用是不好的函数式编程风格。打印语句只是跟踪调用昂贵()的次数。)
在将数据传递给昂贵的操作之前,我首先需要将其拆分成块。
然后我将昂贵的操作映射到块流上。
当我执行此操作时,它会按预期的次数调用昂贵的():
但是,如果我链接到 zipWithIndex 的调用,昂贵的()会被调用很多次:
这是一个错误吗?如果这是所需的行为,有人可以解释为什么吗?如果昂贵的()需要很长时间,您就会明白为什么我更喜欢调用更少的结果。
这是一个带有更多示例的要点:https ://gist.github.com/underspecified/11279251
scala - Scala 隐式生成器
如果我有隐含的 from A
to B
,我怎样才能自动获取隐含的 from F[A]
to F[B]
?
例如,如果我有implicit toInt[A](l: List[A]) = l.size
并且现在我想要一个隐式 from(List[A], Int)
来(Int, Int)
重用toInt
隐式。这在 Scala 中是否可行?
scala - 将 \/[A,A] 折叠为 A
在 Web 应用程序中,我有一个动作可能会以各种不同的方式失败,或者最终会成功。
在这种情况下,成功和失败由 SimpleResult 的子类表示(表示 HTTP 响应)
我使用 scalaz / 上的一元操作来编码我的算法,例如:
所以这最终是一个SimpleResult \/ SimpleResult
,我必须写这个:
从析取中提取结果,我觉得这很丑陋。
是否有一些抽象可以捕捉到这种“明显可简化的结构”?或者也许析取不是正确的抽象?