问题标签 [haskell-pipes]
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.
haskell - 从“托管”管道流式传输
我用来将'sControl.Monad.Managed
包装在一个延续转换器中,但我还想在之后将 HTTP 响应流式传输出去:pipes-http
withHTTP
这fromHTTP
是为了流出响应体。如果以上运行:
我recv: invalid argument (Bad file descriptor)
在第一块之后得到,因为http-client
'responseClose
已经关闭了我的响应正文。
with
如果我想公开一个非样式接口,我应该如何使用管道流式传输 HTTP 响应?
如果我严重误解了延续和管道,谢谢并道歉。
haskell-pipes - 使用haskell管道字节串逐行迭代文件
我正在使用管道库,需要String
使用 ASCII 编码将 ByteString 流转换为行流(即)。我知道还有其他库(Pipes.Text 和 Pipes.Prelude)可能让我更轻松地从文本文件中生成行,但是由于其他一些代码,我需要能够String
从ByteString
.
更正式地说,我需要将 a 转换Producer ByteString IO ()
为 a Producer String IO ()
,这会产生线条。
我敢肯定,对于经验丰富的 Pipes-Programmer 来说,这一定是单线,但到目前为止,我还没有成功破解 Pipes-ByteString 中的所有FreeT
和Lens
-trickery。
任何帮助深表感谢!
斯蒂芬
haskell - 替换列表列表中的元素——haskell
我有这个代码:
replaceNth :: 函数将位置值 ' - ' 替换为 (' P ')
我想将矩阵中的每个案例都更改为 ' - ' 为 ' P '
但它不工作,我总是这个错误:
ghc - 可以增强 GHC 以在错误消息中打印类型别名吗?
我想知道这是否是一个合理的功能请求(如果它已经存在并且我不知道如何访问它,那就更好了)。
为什么这是可取的一个例子是管道库。Pipes 定义了一个类型:
有大量的别名,其中一些是:
可以想象,这是明确错误消息的最坏情况。作为阅读文档的程序员,您正在考虑具有少量参数的更简单类型,但所有错误消息都是具有六个参数的怪物类型,如下所示:
如果该消息可能如下所示会更清楚:
作为一个附带问题,为什么 GHC 会忘记它用 b0 替换的特定类型 Integer 而它以某种方式记住 Bool ?声明的类型是:
反正 ...
类型别名的更好的错误报告是否可以作为功能请求,或者 GHC 是否在检测到类型错误之前很久就忘记了别名?(在我看来,GHC 必须跟踪别名,因为 GHC 似乎在错误消息的“实际类型”部分记住了它,但我不知道编译器是如何工作的。)
haskell - 管道获取 Network.Socket.ByteString.recv:失败(未知错误)
也许做事的方式很愚蠢,但就是这样。我想将 HTTP 请求发送/接收与处理响应分开。
似乎合法。但是我得到了部分响应打印和“Network.Socket.ByteString.recv:失败(未知错误)”。我需要做些什么不同的事情?
haskell - 由内而外构建管道代理
是否可以创建一个函数,以便可以从内到外构造一个Proxy
from管道?由内而外,我的意思是从连接上游和下游连接的函数创建代理。最理想(但不可能)的签名是
我们遇到的第一个问题是构建Proxy
. 我们无法知道函数是否查看Server
或,Client
除非让它们中的每一个都成为M
,在这种情况下,我们只会知道它查看的是哪一个,而不是它试图向上游或下游发送什么值。如果我们专注于上游端,我们唯一知道的就是试图弄清楚上游代理是什么,所以我们需要决定要么总是导致Request
上游更远,要么Respond
ing。无论我们如何回答,我们唯一能提供的价值是()
. 这意味着我们可以Request ()
向上游生产者或Respond ()
立即地。如果我们考虑对两端都进行此选择,则只有四种可能的功能。以下函数以它们的上游和下游连接是向下游 ( D
) 还是上游 ( U
) 发送感兴趣的数据命名。
betweenDD
最有趣的是,它会在 aProducer
和 a之间建立一个管道Consumer
;betweenUU
将对上游运行的管道执行相同的操作。betweenDU
将消耗从两个来源之一请求它的数据。betweenUD
将产生数据,将其发送到两个目的地之一。
我们可以提供一个定义betweenDD
吗?如果没有,我们能否改为为以下更简单的函数提供定义?
这个问题的动机是试图写belowD
来回答关于P.zipWith
.
例子
这个例子恰好是激发这个问题的问题。.
假设我们要创建一个Pipe
将number
通过它的值。将Pipe
具有a
从上方传到下游的值和从(n, a)
下方离开下游的值;换句话说,它将是一个Pipe a (n, a)
.
我们将通过zip
ping 数字来解决这个问题。zip
用数字 ing的结果是一个(->)
从 aProducer a
到 a的函数Producer (n, a)
。
即使Pipe
会从上游消耗a
s,但从函数的角度来看,它需要 a Producer
of a
s 来提供这些值。如果我们有一个定义,belowD
我们可以写
给定一个合适的定义fromList
haskell - How to detect end of input with pipes
I'm trying to read a group of up to 50 items from a pipe and process them in an IO action all at once. (The use case for this is I'm trying to insert data into a database and I want to do an entire batch inside one transaction because it is vastly more efficient). Here is a simplified version of what I've got so far:
The problem is as far as I can tell, unless the number of items to insert happens to divide by 50, I'm going to miss some. What I really want instead of replicateM 50 await
is something that gives me up to 50 items or fewer if the input ends but I can't quite figure out how to write that.
I've been thinking that pipes-parse might be the right library to be looking at. draw
looks to have a promising signature... but so far all the bits aren't fitting together in my head. I have a producer
, I'm writing a consumer
and I don't really get how that relates to the concept of a parser
.
haskell - Haskell 快速并发队列
问题
你好!我正在编写一个日志库,我很想创建一个记录器,它将在单独的线程中运行,而所有应用程序线程只会向它发送消息。我想为这个问题找到最有效的解决方案。我在这里需要简单的未绑定队列。
方法
我创建了一些测试来查看可用解决方案的性能,我在这里得到了非常奇怪的结果。我基于以下内容测试了 4 个实现(下面提供了源代码):
- 管道并发
- Control.Concurrent.Chan
- Control.Concurrent.Chan.Unagi
- 如“Haskell 中的并行和并发编程”一书中所述,基于 MVar请注意,这种技术为我们提供了容量为 1 的有界队列 - 它仅用于测试
测试
以下是用于测试的源代码:
您可以编译它ghc -O2 Main.hs
并运行它。测试创建了 20 个消息生产者,每个生产者产生 1000000 条消息。
结果
问题
我很想问你为什么管道并发版本的执行速度如此之慢,以及为什么它甚至比基于 chan 的版本还要慢得多。我很惊讶,MVar 是所有版本中最快的——谁能告诉更多,为什么我们会得到这个结果,以及在任何情况下我们是否可以做得更好?
haskell - 使用管道 aeson 解析 JSON 流
给定一个简单的 JSON 类型示例:
如何使用管道 aeson 解码使用decoded
镜头通过套接字传来的 JSON 消息流?作为一个例子,我想在解析它们时将它们打印出来:
haskell - Haskell Pipes - 获取管道中最后一个代理的返回值
假设我Proxy
在 Haskell Pipes 中有两个。它们代表外部系统进程。
所以我把它们钩成一个Effect
,像这样:
这Effect
将给我ExitCode
从第一个Proxy
终止的开始。通常这将是produce
,而不是consume
。consume
即使它没有首先终止,获取返回值的惯用管道方法是什么?
到目前为止,我认为如果不执行某种 icky 带内信令,这是不可能的,因此consume
知道流已完成。最后一个 Proxy 知道要关闭的唯一方法是从 中获取一些东西await
,所以我可以向它发送一个空ByteString
来表示流已完成。只是感觉不对。我现在拥有的是一个单独的 MVar,它可以提供退出值,但我认为必须有一种更惯用的方式来做到这一点。