问题标签 [scalaz-stream]

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

scala - 为什么 Process0 未定义为 Process[Id, O]

这就是Process0的定义方式。

实际上我不明白为什么会编译,因为Nothing没有类型参数。

表示没有效果的流

为什么不直接将上下文类型F设置为值类型本身(使用标识类型构造函数scalaz.Scalaz.Id)。

0 投票
0 回答
129 浏览

scala - scalaz流迭代每一行并将其映射到一个大文件的视图对象并返回一个迭代器

我有一个非常大的文件,每一行都可以解析成一个视图对象。但是,我想返回一个迭代器[A]而不是集合,因此它可以为大文件解析提供更好的内存特性。

提前谢谢了

0 投票
1 回答
199 浏览

scalaz-stream - 如何使用 Sink 提高代码的性能?

我对 scalaz-streams sinks 有奇怪的观察。他们工作缓慢。有谁知道这是为什么?有什么方法可以提高性能吗?

这是我的代码的相关部分:没有接收器的版本

这需要大约 7 秒来执行

带水槽的版本

这需要 33 秒来执行。由于存在显着差异,我在这里完全感到困惑。

0 投票
1 回答
143 浏览

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

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

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

提前谢谢了

0 投票
1 回答
212 浏览

scala - 为什么scalaz-stream中有两种网络io实现?

它们位于scalaz.stream.tcpscalaz.stream.nio

  • tcp版本将其Connection视为Process[Task, A]
  • nio版本将其Connection视为Process[Task, Exchange[I, W]]

为什么会有这两个版本?它们适用于哪种情况?

0 投票
1 回答
1441 浏览

scala - 如何用 scalaz-stream 替换作为状态转换序列流编写的程序?

我试图了解如何重新组织我以前编写为一系列状态转换的程序:

我有一些业务逻辑:

有了这些,我希望构建一个程序来传递一些初始状态(一个空 Map),从stdin读取输入,将其转换为In,运行状态转换并将当前状态S和输出输出Outstdout


以前,我会做这样的事情:


但是,我真的很想知道如何将这种方法(状态转换流)与scalaz-stream联系起来。我从这个开始:

这是类型:Process[Task, Transition]. 我真的不知道从那里去哪里。

  1. 我如何“传入”我的程序并运行程序,在每个步骤中将InitialState输出线程化作为下一个步骤的输入?SS
  2. 如何在每个步骤中获取 and 的值S并将Out它们打印到标准输出(假设我可以将它们转换为字符串)?

在尝试使用单一的理解时,我同样陷入困境:

任何帮助是极大的赞赏!


我现在走得更远了。

然后

它不起作用:似乎状态没有通过流进行线程化。相反,在每个阶段,都会传入初始状态。


Paul Chiusano 建议使用process1.scan. 所以现在我这样做:

这里有一个问题:在这个特定的例子中,我的Out类型是一个monoid,所以我的初始状态可以使用它的身份创建,但通常情况可能并非如此。那我该怎么办?(我想我可以使用Option,但这似乎是不必要的。)

0 投票
1 回答
225 浏览

scala - 合并 scalaz-stream 输入进程似乎在标准输入上“等待”

我有一个简单的程序:

文件as.txt包含 5 个a,文件bs.txt包含 3 个b。我看到这种输出:

但是,当我更改in2如下声明时:

然后我得到了我认为是意外的行为。根据文档1,程序应该根据哪个流更快地提供数据,从每个流中非确定性地提取数据。这应该意味着我看到一堆as 立即打印到控制台,但这根本不是发生的事情。

确实,在我按下 之前ENTER,什么都没有发生。很明显,如果我随机选择一个流来获取下一个元素,那么行为看起来很像我所期望的,然后,如果该流被阻塞,合并的进程也会阻塞(即使另一个流包含数据)。

到底是怎么回事?

1 - 好吧,文档很少,但Dan Spiewak在他的演讲中非常清楚地,它会抓住第一个提供数据的人

0 投票
1 回答
964 浏览

scala - 如何将进程发送到 scalaz-stream 中的多个接收器

如果我有一个发送类型值的简单过程,String并且我希望将它们发送到多个接收器(即每个接收器都被发送String),我该怎么做?

例如,运行这个程序:

输出如下所示:

我希望输出是这样的:


编辑

我可以按如下方式实现:

也就是说,我复制输入并交错输出。这可以概括为:


编辑 2

我刚刚意识到泛化toAll不起作用。toBoth确实,虽然

有更好的(内置)方法吗?

0 投票
1 回答
136 浏览

scala - 如何使用 Scalaz-Stream 创建流?

这一定很简单。但由于某种原因,我无法让它工作。

  • 如果我这样做io.linesR(...),我有一个文件行流,没关系。
  • 如果我这样做Processor.emitAll(),我有一个预定义的值流。它也有效。

但我真正需要的是异步生成 scalaz-stream 的值(嗯,来自 Akka 演员)。

我努力了:

  • async.unboundedQueue[String]
  • async.signal[String]

然后调用queue.enqueueOne(...).runorsignal.set(...).run并听queue.dequeueor signal.discrete。只是.map.to。有一个例子证明可以使用另一种流 - 使用处理器或文件中的行。

秘诀是什么?创建稍后流式传输的频道的首选方法是什么?如何用来自另一个上下文的值来喂养它?

谢谢!

0 投票
1 回答
172 浏览

scalaz-stream - 在 scalaz 流中,我如何将 Process[Task,Seq ] 转换为 Process1[Task,B]