问题标签 [io-monad]

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 投票
4 回答
658 浏览

haskell - 从 IO 而非计算本身获取价值

作为 Haskell 的新手,我目前正在尝试通过为简单的命令式玩具语言编写解释器来提高我的技能。

这种语言中的一个表达式是input,它从标准输入中读取一个整数。但是,当我将此表达式的值分配给一个变量,然后稍后再使用此变量时,似乎我实际上存储了读取值的计算而不是读取值本身。这意味着例如语句

将导致解释器调用输入过程3次而不是 1 次。

在评估器模块内部,我使用 aMap来存储变量的值。因为我需要处理 IO,所以它被包裹在一个IOmonad 中,如下面的最小示例中所述:

函数中的第二行main模拟 的赋值x,而第三行模拟二元+运算符的求值。

我的问题是:我该如何解决这个问题,这样上面的代码只输入一次?我怀疑是IO-wrapping 导致了问题,但是当我们处理 IO 时,我看不出有什么办法……?

0 投票
5 回答
5004 浏览

haskell - Haskell IO Int 和 Int

我最近开始学习 Haskell。我正在尝试编写一个选择随机数组元素的程序:

我收到以下错误:

我做错了什么?第一次处理单子对我来说很难

0 投票
1 回答
123 浏览

haskell - Haskell:将`type`转换为`data`语句

data这个 Haskell语句的等效语句是什么type

...这将允许我写:

其中CWorld:

我正在通过实际构建一个实际工作的“虚拟 IO 单子”(在其“虚拟宇宙”中)来寻求“真正了解”单子。对 monads 的概念进行某种“通过构建/工程来理解/解释”,因为我是那种需要自己从头开始构建一些东西才能真正理解“某物”的人,所以我要去这里的路线相同。整个代码上下文在这里https://gist.github.com/NeuronQ/11119444/adbf0a9d6d17d4231d7ec68f565203f8dd75f702,但对于任何有经验的 Haskell 程序员来说,它可能看起来毫无意义和“残暴”。

0 投票
1 回答
351 浏览

haskell - Yesod 的莎士比亚模板 (hamlet) 和 IO

在 Hamlet 中,如何使用内部 IO 操作的结果#{...}

例如 :

失败

我担心我没有从正确的角度解决这个问题,有人可以为我解释一下这个问题吗?

谢谢

0 投票
1 回答
50 浏览

haskell - 添加将 AST 文件写入我的 (rail-) 编译器的可能性

我正在用 Haskell 编写 rail-compiler(rail 是一种深奥的语言),我在 mainmodule 的 main-function 中遇到了一些问题。

1)我希望我的程序询问我是要运行编译管道还是只是在词法分析器之后停止并将 AST 写入文件,以便另一个编译器可以处理我的 AST(抽象语法树)。这是我的程序:

我在第 21 行 ( input <- readFile inputfile) 中收到由<-. 为什么?

我该怎么做?

2)接下来我想以这种方式重构程序,我可以从终端使用参数调用它runhaskell Main(AST)(这样它应该只创建AST)或类似runhaskell Main.hs(这样它应该完成整个管道)。

我希望能得到你的帮助!

0 投票
1 回答
135 浏览

monads - Scalaz和spray中如何处理多个IO点

REST 调用使用 spray.io。它使用各种函数验证该调用中的请求,包括查询数据存储的中间函数。如果一切正常,那么它将写入所述数据存储。在这种情况下,最多有 4 个 IO 操作:HTTP 请求、数据读取、数据写入和 HTTP 响应。如果我决定使用 IO monad,我将如何构造执行 IO,因为我有一些可能需要也可能不需要(即,如果某些验证失败,则可能不需要进行读写操作)穿插非 IO 功能?大概,首先我可以先忽略喷涂的东西,并将评估视为在喷涂完成后开始。但是如何将 IO 函数与非 IO 函数组合起来呢?我是否必须将非 io 的东西提升到 io monad 中?

0 投票
2 回答
1592 浏览

haskell - 如何在带有 do 表示法的列表上使用 map - 即避免使用类型为“[IO ()]”的类型“IO ()”?

所以这个问题更普遍地是关于 Monads(特别是 Fay),但我的例子使用了 IO monad。

我有一个函数,其中输入是字符串列表,我想一个一个地打印每个字符串。所以这是我的想法:

但不起作用,因为它返回类型 [IO ()]。所以我的问题是,我将如何映射一个列表,并将其视为我正在逐行执行函数,以典型的 do-notation 迭代样式(如下所示)?

0 投票
1 回答
123 浏览

haskell - 如何从输入文件流式传输到具有状态的管道

我想使用管道从文件中读取,然后将其流式传输到标记器中。罪魁祸首是,即使是相同的字符序列也可能会根据先前的输入产生不同的标记。

那么我怎样才能在一堆中间处理State一个呢?ConduitIO

仅仅编写Conduit Char (State TokenizerStateType) Token确实会产生几个错误类型的错误(需要 IO,状态得到错误类型)。

由于我不在自己的计算机上,因此我无法提供无法正常工作的最小示例,但是一旦有可用的 ghc,我将添加一个。

0 投票
2 回答
1912 浏览

haskell - 为什么 Haskell 不能通过严格的求值来欺骗执行 IO 操作?

我只是在学习 Haskell 和 IO 单子。我想知道为什么不强制程序输出“hi”和“bye”:

据我了解,$!操作员将强制计算的第一个参数second,并且>>=操作员需要运行print "hi"才能从中获取一个值并将其传递给\r -> return (),这将在屏幕上打印“hi”。

我的推理有什么问题?

而且,有没有办法证明 Haskell 不能被欺骗(除了使用不安全的函数)在“安全”代码中运行 IO 操作?

0 投票
3 回答
133 浏览

haskell - 有什么方法可以制作这个 Haskell IO 函数的更简洁版本吗?

我有大量的 IConnection conn => conn -> IO () 函数,我需要执行这些函数来正确设置数据库。现在,它不是很漂亮,但我在 Haskell 中太初学者了,无法让它变得更好。

无论如何要缩短它?我在玩

但我无法让它工作。建议?