问题标签 [lazy-io]
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 - 是什么导致了这个“关闭句柄的延迟读取”错误?
我刚刚从最新来源安装了 GHC,现在我的程序给了我一条关于“关闭句柄延迟读取”的错误消息。这是什么意思?
haskell - 为什么 gnuplot plot 没有从 getContents 接收到完整的标准输入?
我遇到了惰性 IO 的问题,但我不知道如何解决它。
我在这里有三个小型测试程序,但 V2 是我真正想要的东西。
在某个地方,似乎 getContents 提前停止了,或者 gnuplot 提前完成了编写。
问题的关键是'我如何从标准输入中获取东西,并在此处使用 gnuplot 进行绘制',但我也想知道如何调试潜在问题。
版本 1,不处理 gnuplot。运行,按预期paste <(seq 10000) <(seq 10000) | runhaskell /tmp/hasktest2.hs
打印。(10000.0,10000.0)
显然所有标准输入都已加载。
V2:尝试绘制来自标准输入的任何内容。这与 V1 的运行方式相同 - gnuplot 生成的临时文件被截断,所以我没有得到绘图。但是,如果我使用 1000 而不是 10k 运行,它确实可以工作 - 在编写 gnuplot csv 文件时它会在某些时候被截断,所以我有一条看起来像1767.0, 1767
no的行\n
。
V3:只是为了测试 gnuplot 是否可以实际处理 10k 点,并将它们写入文件 - 这会产生一个情节,正如预期的那样。
haskell - http-conduit、snap 和惰性 IO
我有两个使用 snap 框架的 json api 的 http-servers
我的第一个原型包含一个类似于这个示例处理程序的处理程序
如果我发出 ajax 请求,则会发送和接收响应 - 当服务器resp: testdata
在控制台上写入时我会看到这一点,但发送到浏览器的响应writeLBS
却不是。现在,如果我将最后一行更改为
一切都像魅力一样。我想我遇到了惰性 IO 的陷阱之一,但我不知道如何解决这个问题。
我还尝试了一些没有单liftIO
块但放在liftIO
必要的地方的变体。
编辑
根据@MichaelSnoyman 的评论,我做了一些研究writeLBS
并试图
正如我认为的那样,缓冲可能是问题 - 不,不是
此外,我试图明确地写一个setResponseBody
这也表明没有成功。
json - 直接从 Aeson 编码输出将 JSON 作为惰性 ByteString 写入文件,而不转换为 String
目前,我正在使用类似这样的东西将 JSON 内容(my_json
)写入文件(my_output_filepath
):
这可行,但我想知道是否有必要将ByteString
( encodePretty
) 返回的 a 转换为 aString
在将其写入文件之前,或者它是否会导致性能损失。
我看到有一个变体接受writeFile
aByteString
作为输入。但是,当我尝试使用它时,我收到此错误:
有没有办法让 的Lazy
变体ByteString
与之互操作writeFile
?
json - 在写入文件时有效地将尾随换行符添加到 Aeson 发出的 JSON ByteString
默认情况下,Aesonencode
或encodePretty
不将尾随换行符附加到ByteString
. 即,在 vim 中查看生成的文件时,我看到了[noeol]
指示符。
将换行符附加到文件的高性能/惯用方式是什么?
这是一个SSCCE:Main.hs
附带myproj.cabal
文件:
我可以foo.json
使用snoc
from 函数ByteString
添加换行符,将最后一行更改为Main.hs
:
但是,snoc
文档将其描述为 O(n) 操作。是否应该有办法在恒定时间内附加这个换行符?
haskell - Reimplementing getContents using getChar
On my journing towards grasping lazy IO in Haskell I tried the following:
which just echos all characters typed in stdin until I hit 'x'.
So, I naively thought it should be possible to reimplement getContents
using getChar
doing something along the following lines:
Turns out it's not so simple since the ???
would require a function of type IO [Char] -> [Char]
which would - I think - break the whole idea of the IO monad.
Checking the implementation of getContents
(or rather hGetContents
) reveals a whole sausage factory of dirty IO stuff. Is my assumption correct that myGetContents
cannot be implemented without using dirty, ie monad-breaking, code?
haskell - 为什么不打印强制整个惰性 IO 值?
我正在使用http-client教程使用 TLS 连接获取响应正文。既然我可以观察到print
由 调用withResponse
,为什么不print
强制对以下片段中的输出进行整个响应?
我需要写这个:
我要打印的正文是一个懒惰的 ByteString。我仍然不确定我是否应该期望print
打印整个值。
haskell - http-simple setRequestBodyLBS 背后的哲学
我正在尝试使用 http-simple 库开发一个 http 客户端。该库的某些实现对我来说似乎令人困惑。
这个库大量使用了 Conduit;但是还有这个“setRequestBodyLBS”函数,有趣的是,这里缺少“setRequestBodyBS”函数。据记载,Conduit 和惰性 IO 不能很好地协同工作。所以我的问题是,为什么不反过来呢?即,实现功能的BS版本而不是LBS版本?这里做出的选择背后的想法是什么?