问题标签 [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 回答
393 浏览

scala - 带有块和 zipWithIndex 的 scalaz-stream 中令人费解的行为

我正在尝试使用具有昂贵操作的 scalaz-stream 处理数据流※。

※是的,是的,我知道在代码中混入副作用是不好的函数式编程风格。打印语句只是跟踪调用昂贵()的次数。)

在将数据传递给昂贵的操作之前,我首先需要将其拆分成块。

然后我将昂贵的操作映射到块流上。

当我执行此操作时,它会按预期的次数调用昂贵的():

但是,如果我链接到 zipWithIndex 的调用,昂贵的()会被调用很多次:

这是一个错误吗?如果这是所需的行为,有人可以解释为什么吗?如果昂贵的()需要很长时间,您就会明白为什么我更喜欢调用更少的结果。

这是一个带有更多示例的要点:https ://gist.github.com/underspecified/11279251

0 投票
1 回答
196 浏览

scala - 流处理

有一个要求,当用户上传时,file它应该以下列方式工作

1)文件上传对话框(在浏览器中)呈现给用户。用户选择一个文件。2) 应用程序应该只加载前 x 条记录(例如,假设总记录数为 100,然后获得前 10 条),用户将有机会对记录进行视觉审查(只读视图)。3)然后用户决定两件事之一:“单击提交”,它将接收所有数据并流到服务器,或者如果她/他单击“下一步”,她/他可以查看接下来的 10 条记录等。

Scalaz-stream是否适合作为整体解决方案,特别是从上面执行 2) 和 3)?要仅获取部分数据并暂停流,然后继续、使用并重复该过程?

0 投票
2 回答
402 浏览

scala - 在用户输入时停止 Process[Task, O]

我正在尝试编写以下函数

process用户在stdin. 在这种情况下,可以等待进程中的当前计算结束,然后再结束进程本身。

我尝试了以下方法:

我正在这样测试:

如您所见,用户输入被确认(“这里”被打印了几次),但过程没有被中断。我不确定flatMapwrt 的行为是否符合预期Process.halt

对如何haltOnUserInput正确书写有任何看法吗?

0 投票
2 回答
246 浏览

scala - 使用 scalaz-stream 计算摘要

所以我想知道如何使用 scalaz-stream 来生成使用 java.security.MessageDigest 的文件摘要?

我想使用一个恒定的内存缓冲区大小(例如 4KB)来做到这一点。我想我知道如何开始阅读文件,但我很难理解如何:

1) 调用digest.update(buf)每 4KB,这实际上是对 Java MessageDigest 实例的副作用,我猜这应该发生在 scalaz-stream 框架内。

2) 最后调用digest.digest()以从 scalaz-stream 框架内接收计算出的摘要如何?

我想我明白如何开始:

但后来我被困住了!请问有什么提示吗?我想它必须也可以将摘要对象的创建,更新,检索(实际摘要计算)和销毁包装在scalaz-stream Sink或其他东西中,然后调用.to()传递该Sink?抱歉,如果我使用了错误的术语,我对使用 scalaz-stream 完全陌生。我已经通过了一些示例,但仍在苦苦挣扎。

0 投票
1 回答
385 浏览

scala - 使用 Scalaz 流,如何将 A => Task[B] 转换为 Process1[A,B]

我正在将对远程服务器的 http 请求编码为一个函数,该函数接受一个 id 并产生一个任务 [JValue]。

我想将该函数转换为 Process1,以简化我的程序(通过简化,我的意思是尽可能使用 Processes 作为构建块)

我想转换函数

(其中 A 是 Id 的类型,B 是响应的类型)到

0 投票
1 回答
369 浏览

scala - 使用 scalaz-stream 作为异步计算的实时 Writer

我有一个网络应用程序,它会执行大量缓慢的并发工作来计算其结果。我不想让最终用户挂起,我想通过 websocket 流回进度更新。

我的代码库是由 Scalaz 任意一个 (/) 组成的,例如:

这很好用,但当然,在我从 Future 中得到任何东西之前,需要完成整个计算。即使我堆叠在一个 Writer monad 上进行日志记录,我也只会在完成后得到日志,不会让我的最终用户更快乐。

我玩弄了使用 scalaz-stream Queue 在代码运行时将日志作为副作用发送,但最终结果非常难看:

感觉应该有一种惯用的方法来实现这一目标?如有必要,可以将我的 SIP-14 Scala 期货转换为任务。

0 投票
1 回答
424 浏览

scala - 为什么我们需要 scalaz.stream 而不是 iteratee?

最近,我一直在玩scalaz.iteratee和 Play 的iteratee。我认为 iteratee 是提供模块化而不是旧的命令式 while 循环的好主意——目的是使用一个函数作为每个新行的处理程序,而不是从文件中获取 string[]。

但是,当我查看 scalaz.stream 的功能概述时,它提到了它的设计是为了取代旧的 iteratee implementation,但没有提到他们为什么要替换它。

有人可以向我解释一下,如果我们可以 Stream,我们可以获得哪些功能和好处,以及使用 iteratee 的缺点是什么?

0 投票
2 回答
250 浏览

scala - 如何创建循环流?

我正在尝试通过将一个数据源与来自同一数据源的过滤版本合并来使用 scalaz-stream 创建一个循环过程。这是我到目前为止的一个简单示例:

但它不会按原样编译,而是必须是s2a 。Process[Process.Env[Int,Int]#Y,Int]Process[Task,Int]

如何指定 s2 既是输入(带有s1)又是输出w

0 投票
1 回答
629 浏览

scala - 神秘的 Scalaz NoClassDefFoundError 和 scalaz.InvariantFunctor 错误

我有以下 build.sbt,并且正在运行带有 IntelliJ 管理 sbt 的 Scala 2.10.4,并基于 sbt 构建文件刷新项目。一切工作正常,直到我添加了 scalaz-streams - 我似乎无法在scalaz.concurrent.Task不遇到以下错误之一的情况下使用:



使用此 build.sbt,会发生此错误:

如果我取消注释“scalaz-concurrent”,则会发生相同的错误:


如果我尝试运行这些最新的示例......

同样的错误也会发生。


其他时候,我遇到了这个错误:

有谁知道我如何使用 scalaz 流而不会遇到这些奇怪的错误?我正在尝试将 scalaz-streams 与 akka 演员和期货一起使用,以及可能的无形和 scodec。

0 投票
4 回答
416 浏览

scala - 重复 eval T => scala.concurrent.Future[T] 到 Process[?, T]

我有一个功能get: T => scala.concurrent.Future[T]

我想像这样迭代它:

但是 Iterator 的类型是Future[T],处理这个迭代器并不容易。

我怎么能把它转移到Process[?, T]

(也许T => Future[T]作为上下文类型F)。