问题标签 [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 投票
2 回答
260 浏览

haskell - 如何从 Haskell 中任意类型 [a] 的标准输入读取列表?

我正在编写一个函数,它接受任意列表并比较它们以查看一个是否是另一个的子列表。对于标准输入,我想向用户询问两个列表,但我想不出一种接受任意类型的方法。到目前为止,这是我的代码:

我的主要问题是5我必须为read.

我希望有一些输入和输出示例,而我目前一次只能支持一个:

任何帮助将不胜感激!

0 投票
2 回答
92 浏览

haskell - Haskell:monad 堆栈与 IO 和 [] 绑定

我有:

我想

但我的类型已关闭。我基本上想做一个解除绑定,但我尝试的一切都是微妙的错误。

0 投票
1 回答
184 浏览

haskell - (a -> IO b) 到 IO (a -> b) 的转换

我在 IO 上下文中有几种数据类型,例如:

我想将它们全部放在一个数据对象中,例如:

所以我不必从 IO 上下文中获取每个值,而只需从IO Configdata.

我没有解决方案的关键点是如何转换String -> IO StringIO (String -> String). Hoogle 没有给我任何能够做到这一点的功能。

我不确定这是否可能,因为函数的输入可能是无限的。

有人有解决方案或解释为什么不可能吗?我知道使用列表而不是函数是一种选择,但如果可能的话,我更喜欢使用函数。

0 投票
1 回答
166 浏览

haskell - 在 Haskell IO 中合并和拆分分配 do block

我/认为/我在两个地方对语言有类似的误解,涉及变量赋值在 do 块中的工作方式,涉及 IO monad。您能否帮助我理解(1)这是同样的误解,(2)如何清除它(在答案中,也许特别是如果您对此主题有最喜欢的参考资料)?

我发现当它都是一行时我可以成功执行操作,但当我尝试拆分为 2 以提高可读性时却不行。

第一部分:将 1 行变成 2 行

为什么这行得通?

但这不起作用

给我:

第一个和第二个之间的区别是尝试将查询部分存储在 q 中。

第二部分:将 2 行变成 1 行

为什么会这样:

但这不起作用?

给我

0 投票
1 回答
136 浏览

haskell - Haskell & Scrypt:如何获取加密哈希

*抱歉这个基本问题,刚开始学习 Haskell。

我正在尝试编写一个函数来获取一个字符串并返回一个加密的哈希值。

我现在想出的是:

但是我得到了错误:

知道如何摆脱 IO 吗?

谢谢!

0 投票
2 回答
713 浏览

haskell - 在像 IO 一样的 monad 堆栈中管理资源的最佳方法是什么?

不管是好是坏,Haskell 流行的Servant库使得在涉及ExceptT err IO. Servant 自己的处理程序 monad 是ExceptT ServantErr IO. 正如许多人所说,这是一个有点麻烦的 monad,因为有多种方式无法展开:1)通过IO基础的正常异常,或 2)通过返回Left

正如 Ed Kmett 的exceptions图书馆所帮助澄清的那样:

基于延续的 monad 和ErrorT e IO提供多种故障模式的堆栈是此类 [ MonadMask] 的无效实例。

这非常不方便,因为MonadMask让我们可以访问有用的 [多态版本]bracket函数来进行资源管理(不会由于异常等而泄漏资源)。但是在Servant的Handlermonad中我们不能使用它。

我对它不是很熟悉,但有些人说解决方案是使用monad-control它,它是许多合作伙伴库喜欢的lifted-base,并且lifted-async可以让你的 monad 访问资源管理工具,比如bracket(大概这也适用于ExceptT err IO和朋友?)。

但是,它似乎在社区monad-control失去了青睐,但我无法确定替代方案是什么。甚至 Snoyman 最近safe-exceptions的库也使用了 Kmett 的exceptions库并避免了monad-control.

有人可以为像我这样试图认真使用 Haskell 的人澄清当前的故事吗?

0 投票
3 回答
385 浏览

haskell - Haskell 的`mapM` 的执行顺序

考虑以下 Haskell 语句:

实际上,这会按顺序打印“1”、“2”和“3”。

问题:你怎么知道mapM打印“1”,然后打印“2”,最后打印“3”。有没有保证它会这样做?或者它是如何在 GHC 深处实施的巧合?

0 投票
0 回答
240 浏览

haskell - 与 StateT 和 ST 和 IO 的协程

0 投票
1 回答
943 浏览

haskell - 使用 MonadIO 测试类型类:“没有实例也没有默认方法”错误

我有一个执行一些 IO 的类型类。我已经使用以下方法对其进行了概括MonadIO

在测试中,我希望替换实现,以便测试使用的函数getSomething,所以我这样做:

如果没有实例声明,代码会发出警告:

所以我补充说:

这当然可以编译。

在 Hspec 中运行测试会导致此运行时错误:

我试过使用liftIOfrom Control.Monad.IO.Class

但这会导致NonTermination运行时异常:

请问有什么办法可以解决这个问题吗?

0 投票
1 回答
130 浏览

csv - 将 CSV 文件绑定到句柄的 Haskell 错误

所以我正在为 CSV 文件编写一个实用函数的小玩具箱,并在整个测试过程中我一直在手动绑定文件

但是(从Text.CSV

所以我不得不写一个快速的行来去掉这个错误 csv 废话

并将其重新定义为table = stripBare table'. 在此之后,列表函数对 csv 文件内容起作用,并且生活继续

(题外话:令人惊讶的是没有直接的Either a b -> b功能Data.Either。所以我使用了Data.Either.rights :: [Either a b] -> [b]

我想一次性完成 csv 类型的脱衣并将其绑定到手柄上的工作。就像是

但这会在 ( <-) 上给出一个解析错误,说我可能缺少一个do... 然后

对我大喊大叫,说do块中的最后一个语句必须是表达式。

我究竟做错了什么?

作为一个单独的好奇心,我在这里看到

以非常简单的方式在 Haskell deugars 中做符号。

变成

我觉得这很有吸引力并尝试了以下行,这给了我一个类型错误