问题标签 [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.
haskell - 如何在递归函数中使用 Control.Monad.Cont?
我正在为这个问题提供一个答案,我想到了一个使用Cont
monad的想法。我对 Haskell 了解得不够多,无法解释为什么这个程序不起作用
错误 -
但这对我来说没有意义。为什么我有a2
and m a2
?我期待a
并且b
是同一类型。
这让我很烦,因为相同的程序在 JavaScript 中运行良好。也许 Haskell 需要类型提示?
function - 如何使用带有 IO 读取 Int 的绑定重写“do”块?
所以,我想prog
用>>
/>>=
绑定而不是do
and重写给定的函数<-
:
重写更简单的函数对我来说不是问题,但是readLn :: IO Int
让我很头疼......
我的建议是:
但是,这不起作用,因为将 绑定readLn :: IO
到下一个匿名函数存在问题\age
。有什么帮助吗?
haskell - do-notation/enumFromTo 中的模式匹配会减慢 Haskell 代码的速度吗?
我一直在解决一个非常简单的问题:生成所有长度为 的递减序列,由按字典顺序从到L
的自然数组成。然而,我遇到了一个非常奇怪的问题。看一看:1
M
所以,很明显,这两个函数做的事情完全一样(我在许多测试中检查了它们,它们都给出了正确的结果),但是如果你尝试在 GHCi 中进行评估c 100 98
,c' 100 98
你会发现它在时间上的巨大差异需要:
[a..b]
所以,我对每次生成都有点不安,但我做了一点询问,有人建议 Haskell 不会立即进行模式匹配,而是由于惰性评估而延迟了它,这导致大量额外调用c'
. 然而,第二个理论并不完全成立:我直接在 GHCi 命令提示符下在我的代码中设置了一个断点来监视 的值n
,这表明延迟模式匹配并非如此。
问题实际上可能出在enumFromTo
功能上,还是有其他原因?
haskell - 如何在 Haskell 的 IO monad 中包装字符文字?
我知道您应该将要对结果执行的操作包装在 monad 中,而不是从 monad 中解包。
我找不到任何白痴友好的例子来说明如何做到这一点。
例如,我想做这样的事情:
但是您不能直接将 char 文字与 IO Char 进行比较。
GHCi 版本是 8.4.4。
错误信息:
list - 询问用户在 Haskell 中的列表输入
我在网上找到了这段代码,但它没有运行。
那么如何在 Haskell 中向用户询问列表输入呢?我是Haskell的新手,请在回答时解释一下。谢谢。
haskell - 关于 LYAH 中教授的 Writer monad 的问题。(附加到日志是如何发生的?)
我正在从“Learn you a Haskell for Great Good”教程中学习 Haskell,并且我已经完成了关于writer monads的部分。这是我无法弄清楚的例子。
我试图了解块返回w
的Writer w a
monad中的 monoidic 值是如何do
改变的。本教程没有详细说明mappend
ing 是如何发生的。
作为 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 的部分被改变的?
loops - 如何在haskell中使用do和while循环
我尝试使用添加并打印每个步骤,但它不起作用,有人可以帮助我吗?
haskell - 使用警卫纠正缩进规则
我查看了有关缩进的问题,但没有任何帮助。我的缩进看起来也正确,但根据编译器它不是。什么是正确的缩进,规则是什么?
使用所有空格且不使用制表符。错误:“输入'|'上的解析错误 | 结束 = 返回()“
haskell - 为什么我不能调用函数快速排序(randomList 10)?
我有以下代码:
- randomList - 创建一个给定长度的列表并用随机值填充它;
- quicksort - 快速排序列表。
我需要对创建的数组应用排序:
quicksort (randomList 10)
,但发生错误: