问题标签 [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 - 状态单子,随机数序列和单子代码
我试图掌握状态单子,为此我想编写一个单子代码,该代码将使用线性同余生成器生成一系列随机数(可能不好,但我的目的只是学习状态单子,而不是建立一个好的RNG库)。
生成器就是这样(为简单起见,我想生成一个Bool
s 序列):
不要担心数字,这只是种子的更新规则(根据数字食谱)应该生成Int
s 的伪随机序列。现在,如果我想按顺序生成随机数,我会这样做:
好的,所以我可以通过使用 State Monad 来避免这个样板:
最后:
好的,这很好用,并Bool
为每个给定的种子给我一个 n 伪随机的列表。但...
我可以阅读我所做的(主要基于这个例子:http ://www.haskell.org/pipermail/beginners/2008-September/000275.html )并复制它来做其他事情。但我认为我无法理解 do-notation 和 monadic 函数(如 replicateM)背后真正发生的事情。
任何人都可以帮助我解决一些疑问吗?
1 - 我试图对 nextVal 函数脱糖以了解它的作用,但我做不到。我猜它会提取当前状态,更新它,然后将状态传递给下一个计算,但这只是基于阅读这个 do-sugar 就好像它是英语一样。
我如何真正将这个函数脱糖到原来的 >>= 并逐步返回函数?
2 - 我无法掌握put
andget
函数的确切作用。我可以猜到他们“打包”和“解包”状态。但糖背后的机制对我来说仍然难以捉摸。
好吧,非常欢迎有关此代码的任何其他一般性评论。我有时会迷恋 Haskell,因为我可以创建一个可以工作的代码并按照我的预期去做,但我不能像我习惯于使用命令式程序那样“遵循评估”。
list - 你能把 Haskell 列表变成一系列 do 指令吗?
你能创建一个函数列表,然后按顺序执行它们,也许将它们传递给 do 表示法吗?
我目前正在通过映射数据列表来做到这一点,并且想知道我是否可以调用以某种方式将结果作为一系列顺序调用传递?
haskell - 是否可以在 Haskell 中滚动您自己的语法糖(如 do-notation 或 arrow-notation)?
好吧,这个问题是不言自明的。假设我想实现一些特殊的语法只是为了好玩。是否可以?我应该使用什么工具?
haskell - Haskell - “如何在“do”块中正确使用“if”语句?
这些“简单”的行出了点问题……
GHCi 将抱怨标识符,或者在我添加后不执行最后一行操作else do
。
我认为异常处理可能有效,但在这种常见的“检查并做某事”语句中是否有必要?
谢谢。
haskell - Haskell 中的 do-blocks 中简洁的 if-then-else 表示法
我无法弄清楚如何使 [ http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse ] 中提到的简洁的 if-then-else 符号起作用。这行得通,
但这不会,并且插入所述分号(请参阅链接)只会导致我的解析错误。
haskell - Haskell IF 其他
then
在这种情况下,如何在 a or中使用多个 putStr else if
?
当我尝试出错时
scala - 等效于 Scala 中的 Haskell do-notation 或 F# 计算表达式?
F# 计算表达式允许将一元语法的复杂性隐藏在一层厚厚的语法糖后面。Scala中有类似的东西吗?
我觉得是为了理解...
例子:
但是感觉真的不太对。有更好的语法吗?
例如在haskell中你会有
这与 scala 不同,它看起来不像 foreach 循环。Scala 语法似乎与列表理解有很强的耦合,这是一个独特的概念。这使我无法编写看起来并不奇怪的内部 DSL (monad)。
haskell - 为 Monad 脱糖 do-notation
当我学习 Haskell 时,我意识到do
符号只是语法糖:
翻译成
我意识到我可能会使用 do-notation,但我想了解翻译中发生了什么。所以纯粹出于教学原因,ghc/ghci 有没有办法为我用 do-notation 编写的相当复杂的 monad 提供相应的绑定语句?
编辑。事实证明 #haskell 上的 lambdabot 可以做到这一点:
这是Undo 插件的源代码。
haskell - (>>=) 的执行顺序不是我所期望的
我有一系列网络请求,每个请求都需要 >10 秒。
为了让用户知道发生了什么,我提供了更新:
使用 GHCi,这可以按预期工作,但是编译或使用 runghc,“下载”在“完成”之前不会打印。
我用 (>>=) 和 (>>) 重写了它,但我遇到了同样的问题。
这是怎么回事?