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

haskell - 一个涉及 putStrLn 的谜团

0 投票
1 回答
138 浏览

haskell - 如何在递归函数中使用 Control.Monad.Cont?

我正在为这个问题提供一个答案,我想到了一个使用Contmonad的想法。我对 Haskell 了解得不够多,无法解释为什么这个程序不起作用

错误 -

但这对我来说没有意义。为什么我有a2and m a2?我期待a并且b是同一类型。

这让我很烦,因为相同的程序在 JavaScript 中运行良好。也许 Haskell 需要类型提示?

0 投票
2 回答
89 浏览

function - 如何使用带有 IO 读取 Int 的绑定重写“do”块?

所以,我想prog>>/>>=绑定而不是doand重写给定的函数<-

重写更简单的函数对我来说不是问题,但是readLn :: IO Int让我很头疼......

我的建议是:

但是,这不起作用,因为将 绑定readLn :: IO到下一个匿名函数存在问题\age。有什么帮助吗?

0 投票
2 回答
246 浏览

haskell - do-notation/enumFromTo 中的模式匹配会减慢 Haskell 代码的速度吗?

我一直在解决一个非常简单的问题:生成所有长度为 的递减序列,由按字典顺序从到L的自然数组成。然而,我遇到了一个非常奇怪的问题。看一看:1M

所以,很明显,这两个函数做的事情完全一样(我在许多测试中检查了它们,它们都给出了正确的结果),但是如果你尝试在 GHCi 中进行评估c 100 98c' 100 98你会发现它在时间上的巨大差异需要:

c 100 98:大约 5 秒

c' 100 98:大约 70 秒

正如我所提到的,结果是相同的

[a..b]所以,我对每次生成都有点不安,但我做了一点询问,有人建议 Haskell 不会立即进行模式匹配,而是由于惰性评估而延迟了它,这导致大量额外调用c'. 然而,第二个理论并不完全成立:我直接在 GHCi 命令提示符下在我的代码中设置了一个断点来监视 的值n,这表明延迟模式匹配并非如此。

问题实际上可能出在enumFromTo功能上,还是有其他原因?

0 投票
3 回答
805 浏览

haskell - 如何在 Haskell 的 IO monad 中包装字符文字?

我知道您应该将要对结果执行的操作包装在 monad 中,而不是从 monad 中解包。

我找不到任何白痴友好的例子来说明如何做到这一点。

例如,我想做这样的事情:

但是您不能直接将 char 文字与 IO Char 进行比较。

GHCi 版本是 8.4.4。

错误信息:

0 投票
2 回答
118 浏览

list - 询问用户在 Haskell 中的列表输入

我在网上找到了这段代码,但它没有运行。

那么如何在 Haskell 中向用户询问列表输入呢?我是Haskell的新手,请在回答时解释一下。谢谢。

0 投票
2 回答
228 浏览

haskell - 关于 LYAH 中教授的 Writer monad 的问题。(附加到日志是如何发生的?)

我正在从“Learn you a Haskell for Great Good”教程中学习 Haskell,并且我已经完成了关于writer monads的部分。这是我无法弄清楚的例子。

我试图了解块返回wWriter w amonad中的 monoidic 值是如何do改变的。本教程没有详细说明mappending 是如何发生的。

作为 monad的类型声明Writer和实例声明Writer由教程给出

如果根据实例声明return x产生结果Writer (x, mempty)并且mempty对于 monoid[a][],不应该return (a*b),等于return (3*5),评估为(15,[])

我把上面的命令给了 ghci ,它返回一个WriterT类型值,元组包含一个空列表,正如预期的那样。

我改用do绑定运算符重写了该块。上面的代码给出了与教程中的原始代码相同的结果。

我的印象是>>=Int 3从结果中提取logNumber 3并将其提供给(\a -> logNumber 5 ...etc.),然后logNumber在不同的值 ( 5) 上执行函数,依此类推。这些操作是如何导致[String]Writer monad 的部分被改变的?

0 投票
1 回答
174 浏览

loops - 如何在haskell中使用do和while循环

我尝试使用添加并打印每个步骤,但它不起作用,有人可以帮助我吗?

0 投票
2 回答
174 浏览

haskell - 使用警卫纠正缩进规则

我查看了有关缩进的问题,但没有任何帮助。我的缩进看起来也正确,但根据编译器它不是。什么是正确的缩进,规则是什么?

使用所有空格且不使用制表符。错误:“输入'|'上的解析错误 | 结束 = 返回()“

0 投票
1 回答
86 浏览

haskell - 为什么我不能调用函数快速排序(randomList 10)?

我有以下代码:

  1. randomList - 创建一个给定长度的列表并用随机值填充它;
  2. quicksort - 快速排序列表。

我需要对创建的数组应用排序: quicksort (randomList 10),但发生错误: