问题标签 [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.
list - 列表 monad 的“do”表示法中的解析错误
好的,所以这是一个奇怪的。
这完美地工作:
但是这个:
惨败。GHC 完全拒绝解析这一点。无论我如何坐立不安,我似乎都无法说服 GHC 允许我将列表分布在多行中。这是一个问题,因为如果你用非常大x+y
的表达式替换和,它很快就会变得难以阅读......x-y
有谁知道为什么这不起作用,我该如何强制它起作用?(或者至少做一些看起来清晰的事情?)
haskell - Haskell do 块中如何允许表达式
在下面的代码中,第 4 行,我有一个表达式夹在 do 块中的两个 IO 操作之间:
我将 do 表示法理解为使用 >>= 或 >> 将单子操作链接在一起。但是当你在两者之间有一个表达式时,它是如何工作的?您不能只使用 >> 将 3-5 行粘合在一起。
list - List monad 在这个例子中是如何工作的?
List 单子有return x = [x]
. 那么为什么在下面的例子中结果不是[(["a", "b"], [2, 3])]
呢?
haskell - 是否可以在从 Haskell 的 do 块返回之前检查某些条件?
我正在做这样的事情
包含 if 的行给了我一个编译错误,但我不太确定编写相同内容的正确方法。
为了更清楚起见,在 Scala 中,我想要实现的等价物是:
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
?我对<-
运营商不了解什么?
haskell - 在 Haskell do-notation 中生成唯一值
为了生成 x86 汇编代码,我定义了一个名为的自定义类型X86
:
这种类型在 do-notation 中使用,如下所示。这使得编写用于生成 if 语句、for 循环等的模板变得很容易......
指令定义如下:
完成的汇编文件打印如下:
我X86
以以下方式实现了 monad。本质上,序列运算符按顺序连接汇编代码块并确保计数器递增。
问题是标签没有正确增加,所以它们不是唯一的!以下是输出:
我希望输出对每个标签都有一个唯一的值:
为了完成示例,这里是allocatedUniqueLabel
函数的实现:
如何修复我的X86
monad 以使标签独一无二?
这是我尝试过的:
- 增加一个全局计数器。=> Haskell 不允许 IO monad 之外的全局状态。
- 使用
State
单子。=> 我研究了一些例子,但不明白如何将它们集成到我现有的X86
monad 中。 - 跟踪单子外的柜台。=> 我宁愿计数器在“幕后”更新;否则,许多不使用标签的代码模板将需要手动传播计数器。
templates - do 符号神奇地将原本被拒绝的表达式修复为参数
在 Nim 模板中:作为这个问题的后续,我想到了通过使用重载,甚至在这种情况下,使用普通包装来解决默认参数不可用的问题。不过,如果没有什么东西再次击中粉丝就太好了,让我分享一下:
请注意,bodyFinally
现在这是一个硬(必须指定)参数。
很酷(它有效)。虽然这不是我的第一枪tpl2
;这是:
因为这就是do
所谓的重写的东西。除了我们得到:
错误:预期的表达式,但发现“关键字丢弃”
那是怎么回事?
haskell - 无法使用 IO Monad 打印到文件
您好,我已经完成了我的 JSon 类型,我正在尝试将其写入文件。我可以从前奏中做到这一点,但在使用 IO Monad 时我不能做到这一点。我得到以下信息error
:
主要的
为什么这在 IO Monad 中不起作用,因为renderJValue sample
在前奏中可以正常工作。
Jlib.hs
看跌期权
PS renderJValue
返回一个字符串
PS:如果我开始前奏,我会加载模块并渲染它的工作值:
haskell - 我们可以访问 do-block 中定义的 replicateM 的输出吗
假设我有这样的东西
我可以访问我的 replicateM 的结果,例如它是否是返回值,例如打印出来。或者我必须在实际的 do-block 中使用 replicateM 吗?
haskell - 在 where 子句下做语句
我正在尝试使用绑定转换IO [String]
为;但是,我需要在语句下使用块来执行此操作,但 Haskell 一直抱怨缩进。这是代码:[String]
<-
do
where
这是什么原因?我们如何在语句中使用do
块?where
而且,有没有机会在守卫面前发表一些声明?