问题标签 [monads]
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 - 在 F# 中实现 Haskell-MaybeMonad - 我们如何才能变得如此懒惰?
我们正在尝试在 F# 中从http://www.haskell.org/all_about_monads/html/maybemonad.html构建 Haskell-MaybeMonad 示例。
这个想法是在两个字典中搜索一个邮件地址。如果两个查找之一返回结果,我们将查看第三个。
问题是即使第一次返回结果,我们也会执行第二次查找。Haskell 的好处就在这里,它评估惰性。现在我们在 F# 中寻找类似的东西。我们尝试了以下方法,但它看起来很难看,似乎打破了在构建器中封装可能逻辑的想法:
有更好的解决方案吗?
问候,叉子
haskell - Haskell:如何在 State monad 之上编写交互式解释器?
我们正在开发一个在内部使用状态单子的模型文件系统。我们有一个类型类,其操作如下:
我们正在开发一个小型交互式解释器,它将提供诸如cd
、ls
、等命令cat
。解释器中的操作可以这样写:
Operation
和的定义Response
并不重要;如果你喜欢,把它们当作字符串。
我要解决的问题是在 I/O monad 中编写一个顶级循环来解释文件系统Operation
并打印响应。如果 IO 是 FS 的一个实例(也就是说,如果我们直接使用 IO monad),生活会很简单:我们可以写
但这不是我想要的。我想使用Control.Monad.State
:
并声明
使用FS
抽象,我可以编写一个可以与任何实例一起使用的单步函数,并且确实可以编译以下代码:
在这一点上,我完全被困住了。 我要做的是在 IO monad 中编写一个交互式循环,它可以读取Operation
s 和 print Response
s,但它适用于不一定是 IO 的状态monad。(有一个不在 IO 中的模型的原因之一是我们可以测试 QuickCheck 属性。)
我觉得这必须是一个标准问题——在一个非有状态抽象之上的交互式读取 - 评估 - 打印循环- 但我一定遗漏了一些非常明显的东西,因为我似乎无法 IO
弄清楚。我在网上看过,但没有开悟。
任何帮助编写可以调用的交互式、执行 IO 的计算step
将不胜感激。
haskell - 非编程术语中的 Monad
可能重复:
什么是单子?
你会如何用非编程术语来描述一个 monad?是否有一些编程之外的概念/事物(在所有编程之外,而不仅仅是 FP)可以说以一种重要的方式行动或像 monad 一样?
haskell - Monad“绑定”功能问题
如果我这样定义“绑定”函数:
如果我希望结果是新的 Monad 类型,或者我应该使用相同的 Monad 但 b 和以前一样在同一个 Monad 框中,这个定义会对我有帮助吗?
haskell - Haskell 的 mapM 不懒吗?
更新:好的,这个问题可能变得非常简单。
为什么这永远不会回来?
mapM 不会懒惰地处理无限列表吗?
下面的代码挂起。但是,如果我用 B 行替换 A 行,它就不再挂起。或者,如果我在 A 行前面加上“splitRandom $”,它也不会挂起。
Q1是:mapM不偷懒吗?否则,为什么用 B 行替换 A 行“修复此”代码?
Q2 是:为什么前面的 A 行和 splitRandom “解决”了这个问题?
该代码懒惰地生成一个无限的随机数列表。然后它生成一个随机数。通过使用 splitRandom,我可以在无限列表之前先评估后一个随机数。如果我在函数中返回 b 而不是 c,则可以证明这一点。
但是,如果我将 mapM 应用于列表,程序现在会挂起。为了防止这种挂起,我必须在 mapM 之前再次应用 splitRandom。我的印象是mapM可以偷懒
monads - Haskell多参数类型类中的上下文是什么
在 Real World Haskell 的第 15 章中,定义了一个类型类:
几段后,它说 >>= 和 return 不需要定义,因为上下文。但是没有进一步解释上下文的含义。
如果只有“m”是 Monad 的实例,编译器如何知道 MonadSupply 是 Monad 的实例?
scala - Scalaz 的 Reader Monad
我尝试用 scalaz 定义 Reader monad,如下所示:
但我得到一个编译器错误:
这是为什么?
谢谢,列维
haskell - Haskell Cont monad 如何以及为什么工作?
这就是 Cont monad 的定义方式:
你能解释一下它是如何以及为什么起作用的吗?它在做什么?
haskell - Haskell中的mapM严格吗?为什么这个程序会出现堆栈溢出?
以下程序正确终止:
跑步:
然而,给它一个无限列表,程序永远不会终止,并且在编译时,最终会出现堆栈溢出错误!
跑步,
我希望程序在getStdRandom
我每次从列表中选择一个项目时都会懒惰地评估,并在这样做 5 次后完成。为什么要评估整个列表?
谢谢。
有没有更好的方法来获得无限的随机数列表?我想将此列表传递给纯函数。
编辑:更多阅读表明该功能
是我一直在寻找的。
EDIT2:在阅读了 camccann 的回答后,我意识到getStdGen
每次通话都会获得新的种子。相反,最好将此函数用作简单的一次性随机列表生成器:
但我仍然不明白为什么我的mapM
电话没有终止。显然与随机数无关,但mapM
可能与此有关。
例如,我发现以下内容也不会终止:
是什么赋予了?顺便说一句,恕我直言,上述randomInts
功能应该在System.Random
. 能够非常简单地在 IO monad 中生成随机列表并在需要时将其传递给纯函数非常方便,我不明白为什么这不应该出现在标准库中。
haskell - 状态单子哈斯克尔
我想写一个函数来使用haskell中的State Monad计算平均值这是我写的代码
我在 GHCI 中编译时遇到了这个错误,我卡在那里你能帮我理解什么是错的,提前谢谢你