问题标签 [state-monad]
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 - Haskell:映射 runST
我有一个类型的绑定[ST s (Int, [Int])]
,我正在尝试runST
使用 map 应用到每个元素,如下所示:
这给了我一条错误消息
我一定有什么误解。我知道runST 和 function composition,但不确定这是否适用。
感谢大家的时间!
haskell - haskell - 状态单子函数得到?
根据State Monad的get函数提出一个问题:
如果我跑
运行状态得到 1
我得到了结果
(1,1)
这对我来说没问题,因为 get 函数将结果值设置为状态,在这种情况下,状态为 1。因此,(1,1) 是结果。好的。
但如果我跑
runState (do{(a,b) <- get; return a}) (False, 0)
我得到了结果
(假,(假,0))
而这我不明白。
get 函数将结果值设置为状态并保持状态不变。所以我期望的是这样的
((假,0),(假,0))
这个也一样
runState (do{(a,b) <- get; return b}) (False, 0)
结果是
(0,(假,0))
如上所述,我再次不明白这一点。
所以,如果你能为我解释这个奇怪的结果,那就太好了。;)
提前致谢
此致,
吉米
haskell - 如何处理 Gtk2Hs 中的应用程序状态
尝试学习使用 Gtk2Hs 编写应用程序时,我在弥合事件驱动的 Gtk2HS 和我的模型的持久状态之间的差距时遇到了困难。所以为了简化,假设我有这个简单的应用程序
我的应用程序的状态是按钮被按下了多少次。看到其他类似这样的帖子,他们依赖于 MVar 或 IORef,这对我来说似乎并不令人满意,因为将来我可能会想要重构代码,以便状态存在于自己的上下文中。
我认为解决方案应该使用 State monad 使用 step 函数,例如:
但我不确定其中的含义,如何在上面的代码中做到这一点,或者即使那个 monad 是我问题的正确解决方案。
scala - 映射和携带状态的正确单子或序列理解是什么?
我正在编写一个编程语言解释器。
我需要正确的代码习惯来评估一系列表达式以获取它们的一系列值,并在评估发生时将状态从一个评估器传播到下一个评估器。我想要一个函数式编程习语。
这不是折叠,因为结果像地图一样出来。这不是地图,因为横穿了国家道具。
我所拥有的是我用来试图解决这个问题的代码。先忍受几行测试台:
我目前的解决方案。使用在评估地图主体时更新的 var:
我使用 foldLeft 有我认为不可接受的解决方案,它执行我所说的“折叠时将其包起来”的成语:
我还有几个递归变体(很明显,但也不清楚或动机不强),其中一个使用几乎可以容忍的流:
但是,我想不出像上面的原始“var”解决方案那样紧凑或清晰的东西,我愿意接受,但我认为吃/喝/睡觉单子成语的人只会说.. . 使用这个... (希望如此!)
haskell - 从 Get monad 读取位的 Monadic 方式
我需要从 Get monad 中读取一些位。现在我的代码看起来像
我想把它包装成某种状态单子,有类似的代码
我应该实现哪些功能?它们应该如何实施?
我查看了 Get 和 BitGet 源代码,但不完全理解发生了什么。
haskell - 单子迭代 Data.Sequence
我有一个需要迭代的 Data.Sequence。问题在于它是有状态的,并且序列可能会由于所述迭代而增长。
所以我用显式递归来做这件事,但它看起来很笨重。此外,这似乎是一件很平常的事情。我重新发明了哪些常见的一元控制结构,很糟糕?
haskell - 使用 ReaderT 和 StateT Monads 将函数拼接在一起
我从 Haskell 开始,我需要帮助使用ReaderT
和StateT
Monads 将函数拼接在一起。
理想情况下,如果可能的话,所有函数都将具有相同的签名(我理解那些 Monad 应该提供帮助),并且能够读取环境并更改状态。
下面的代码应该openClientSocket
使用初始环境简单地打开一个 Socket ,在链中initialNetwork
注入socket
and ,然后调用作为参数传递的“下一个”函数(在这种情况下是函数)。address
func
sendMsg
但是我面临多个问题:
a)我应该如何调用传入
func
的openClientConnection
?b)
HNT
Monad 与其他 Monad 组成(?)。我如何阅读和操作内部 Monads ?
那么有人可以帮我修复这段代码,如果可能的话,派生/解释“理想”模式以实现主题中描述的目标。
非常感谢
湾。
haskell - 来自 Haskell 的 State Monad 的 ID
可能重复:
在 Haskell 中创建唯一标签
我有一个数据类型 Person 和一些用于创建 Persons 的输入数据。
我想让每个人都有自己的 ID(比如说整数 [0..])。我可以通过递归来做到这一点,但由于我在 Haskell 中这样做,我想了解单子。我想,State Monad 可能是这项工作的最佳选择?
问题是,我真的不明白很多事情:我什么时候在 monad 里面(什么函数可以使用里面),我如何将它们组合在一起,我如何让“tick”函数前进,等等。 .
所以我目前对此感到困惑:tick 功能可能有效,但我不确定如何使用它;以及如何依次获取其用于构建 Persons 的值。
编辑:使用 Data.Unique 或 Data.Unique.Id 会更容易吗?在我的情况下如何使用它?
haskell - 返回带有状态单子的值
一般来说,我是 Monads 和 Haskell 的新手,并试图了解如何在使用它们时返回一个值。我的代码如下所示:
我尝试使用snd (snd b)
,但显然State MyState B
不是元组?如何返回所需的值(B "b")
?
编辑:考虑到丹尼尔的建议,重写看起来像这样:
这仍然会导致编译错误:
编辑2:固定!最终版本如下所示: