问题标签 [do-notation]

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 投票
3 回答
131 浏览

list - 列表 monad 的“do”表示法中的解析错误

好的,所以这是一个奇怪的。

这完美地工作:

但是这个:

惨败。GHC 完全拒绝解析这一点。无论我如何坐立不安,我似乎都无法说服 GHC 允许我将列表分布在多行中。这是一个问题,因为如果你用非常x+y的表达式替换和,它很快就会变得难以阅读......x-y

有谁知道为什么这不起作用,我该如何强制它起作用?(或者至少做一些看起来清晰的事情?)

0 投票
1 回答
558 浏览

haskell - Haskell do 块中如何允许表达式

在下面的代码中,第 4 行,我有一个表达式夹在 do 块中的两个 IO 操作之间:

我将 do 表示法理解为使用 >>= 或 >> 将单子操作链接在一起。但是当你在两者之间有一个表达式时,它是如何工作的?您不能只使用 >> 将 3-5 行粘合在一起。

0 投票
2 回答
138 浏览

list - List monad 在这个例子中是如何工作的?

List 单子有return x = [x]. 那么为什么在下面的例子中结果不是[(["a", "b"], [2, 3])]呢?

0 投票
1 回答
142 浏览

haskell - 是否可以在从 Haskell 的 do 块返回之前检查某些条件?

我正在做这样的事情

包含 if 的行给了我一个编译错误,但我不太确定编写相同内容的正确方法。

为了更清楚起见,在 Scala 中,我想要实现的等价物是:

0 投票
1 回答
195 浏览

haskell - Haskell Monads中的`let .. in do`和`<-`符号有什么区别?

我正在尝试实现一个将字符串转换为 Maybe Ints 列表的函数,例如readInts "1 2 42 foo" = [Just 1,Just 2,Just 42,Nothing].

我的第一个方法是:

这导致了以下错误:

我接下来尝试(并工作)的是:

我的问题是,words s显然是 type [String]。为什么解释器说它是一个String?我对<-运营商不了解什么?

0 投票
3 回答
445 浏览

haskell - 在 Haskell do-notation 中生成唯一值

为了生成 x86 汇编代码,我定义了一个名为的自定义类型X86

这种类型在 do-notation 中使用,如下所示。这使得编写用于生成 if 语句、for 循环等的模板变得很容易......

指令定义如下:

完成的汇编文件打印如下:

X86以以下方式实现了 monad。本质上,序列运算符按顺序连接汇编代码块并确保计数器递增。

问题是标签没有正确增加,所以它们不是唯一的!以下是输出:

我希望输出对每个标签都有一个唯一的值:

为了完成示例,这里是allocatedUniqueLabel函数的实现:

如何修复我的X86monad 以使标签独一无二?

这是我尝试过的:

  • 增加一个全局计数器。=> Haskell 不允许 IO monad 之外的全局状态。
  • 使用State单子。=> 我研究了一些例子,但不明白如何将它们集成到我现有的X86monad 中。
  • 跟踪单子外的柜台。=> 我宁愿计数器在“幕后”更新;否则,许多不使用标签的代码模板将需要手动传播计数器。
0 投票
1 回答
54 浏览

templates - do 符号神奇地将原本被拒绝的表达式修复为参数

在 Nim 模板中:作为这个问题的后续,我想到了通过使用重载,甚至在这种情况下,使用普通包装来解决默认参数不可用的问题。不过,如果没有什么东西再次击中粉丝就太好了,让我分享一下:

请注意,bodyFinally现在这是一个硬(必须指定)参数。

很酷(它有效)。虽然这不是我的第一枪tpl2;这是:

因为这就是do所谓的重写的东西。除了我们得到:

错误:预期的表达式,但发现“关键字丢弃”

那是怎么回事?

0 投票
1 回答
91 浏览

haskell - 无法使用 IO Monad 打印到文件

您好,我已经完成了我的 JSon 类型,我正在尝试将其写入文件。我可以从前奏中做到这一点,但在使用 IO Monad 时我不能做到这一点。我得到以下信息error

主要的

为什么这在 IO Monad 中不起作用,因为renderJValue sample在前奏中可以正常工作。

Jlib.hs

看跌期权

PS renderJValue返回一个字符串

PS:如果我开始前奏,我会加载模块并渲染它的工作值:

0 投票
3 回答
167 浏览

haskell - 我们可以访问 do-block 中定义的 replicateM 的输出吗

假设我有这样的东西

我可以访问我的 replicateM 的结果,例如它是否是返回值,例如打印出来。或者我必须在实际的 do-block 中使用 replicateM 吗?

0 投票
4 回答
827 浏览

haskell - 在 where 子句下做语句

我正在尝试使用绑定转换IO [String]为;但是,我需要在语句下使用块来执行此操作,但 Haskell 一直抱怨缩进。这是代码:[String]<-dowhere

这是什么原因?我们如何在语句中使用do块?where而且,有没有机会在守卫面前发表一些声明?