问题标签 [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.

0 投票
3 回答
1194 浏览

haskell - Haskell:映射 runST

我有一个类型的绑定[ST s (Int, [Int])],我正在尝试runST使用 map 应用到每个元素,如下所示:

这给了我一条错误消息

我一定有什么误解。我知道runST 和 function composition,但不确定这是否适用。

感谢大家的时间!

0 投票
3 回答
3111 浏览

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))

如上所述,我再次不明白这一点。

所以,如果你能为我解释这个奇怪的结果,那就太好了。;)

提前致谢

此致,

吉米

0 投票
1 回答
524 浏览

haskell - 如何处理 Gtk2Hs 中的应用程序状态

尝试学习使用 Gtk2Hs 编写应用程序时,我在弥合事件驱动的 Gtk2HS 和我的模型的持久状态之间的差距时遇到了困难。所以为了简化,假设我有这个简单的应用程序

我的应用程序的状态是按钮被按下了多少次。看到其他类似这样的帖子,他们依赖于 MVar 或 IORef,这对我来说似乎并不令人满意,因为将来我可能会想要重构代码,以便状态存在于自己的上下文中。

我认为解决方案应该使用 State monad 使用 step 函数,例如:

但我不确定其中的含义,如何在上面的代码中做到这一点,或者即使那个 monad 是我问题的正确解决方案。

0 投票
3 回答
2182 浏览

scala - 映射和携带状态的正确单子或序列理解是什么?

我正在编写一个编程语言解释器。

我需要正确的代码习惯来评估一系列表达式以获取它们的一系列值,并在评估发生时将状态从一个评估器传播到下一个评估器。我想要一个函数式编程习语。

这不是折叠,因为结果像地图一样出来。这不是地图,因为横穿了国家道具。

我所拥有的是我用来试图解决这个问题的代码。先忍受几行测试台:

我目前的解决方案。使用在评估地图主体时更新的 var:

我使用 foldLeft 有我认为不可接受的解决方案,它执行我所说的“折叠时将其包起来”的成语:

我还有几个递归变体(很明显,但也不清楚或动机不强),其中一个使用几乎可以容忍的流:

但是,我想不出像上面的原始“var”解决方案那样紧凑或清晰的东西,我愿意接受,但我认为吃/喝/睡觉单子成语的人只会说.. . 使用这个... (希望如此!)

0 投票
1 回答
170 浏览

haskell - 从 Get monad 读取位的 Monadic 方式

我需要从 Get monad 中读取一些位。现在我的代码看起来像

我想把它包装成某种状态单子,有类似的代码

我应该实现哪些功能?它们应该如何实施?

我查看了 Get 和 BitGet 源代码,但不完全理解发生了什么。

0 投票
1 回答
191 浏览

haskell - Haskell:MonadState 的 put 是如何工作的?

http://hackage.haskell.org/packages/archive/mtl/1.1.0.2/doc/html/src/Control-Monad-State-Lazy.html

() 在 put 的定义中做了什么?

0 投票
1 回答
228 浏览

haskell - 单子迭代 Data.Sequence

我有一个需要迭代的 Data.Sequence。问题在于它是有状态的,并且序列可能会由于所述迭代而增长。

所以我用显式递归来做这件事,但它看起来很笨重。此外,这似乎是一件很平常的事情。我重新发明了哪些常见的一元控制结构,很糟糕?

0 投票
1 回答
613 浏览

haskell - 使用 ReaderT 和 StateT Monads 将函数拼接在一起

我从 Haskell 开始,我需要帮助使用ReaderTStateTMonads 将函数拼接在一起。

理想情况下,如果可能的话,所有函数都将具有相同的签名(我理解那些 Monad 应该提供帮助),并且能够读取环境并更改状态。

下面的代码应该openClientSocket使用初始环境简单地打开一个 Socket ,在链中initialNetwork注入socketand ,然后调用作为参数传递的“下一个”函数(在这种情况下是函数)。addressfuncsendMsg

但是我面临多个问题:

  • a)我应该如何调用传入funcopenClientConnection

  • b) HNTMonad 与其他 Monad 组成(?)。我如何阅读和操作内部 Monads ?

那么有人可以帮我修复这段代码,如果可能的话,派生/解释“理想”模式以实现主题中描述的目标。

非常感谢

湾。

0 投票
4 回答
983 浏览

haskell - 来自 Haskell 的 State Monad 的 ID

可能重复:
在 Haskell 中创建唯一标签

我有一个数据类型 Person 和一些用于创建 Persons 的输入数据。

我想让每个人都有自己的 ID(比如说整数 [0..])。我可以通过递归来做到这一点,但由于我在 Haskell 中这样做,我想了解单子。我想,State Monad 可能是这项工作的最佳选择?

问题是,我真的不明白很多事情:我什么时候在 monad 里面(什么函数可以使用里面),我如何将它们组合在一起,我如何让“tick”函数前进,等等。 .

所以我目前对此感到困惑:tick 功能可能有效,但我不确定如何使用它;以及如何依次获取其用于构建 Persons 的值。

编辑:使用 Data.Unique 或 Data.Unique.Id 会更容易吗?在我的情况下如何使用它?

0 投票
1 回答
892 浏览

haskell - 返回带有状态单子的值

一般来说,我是 Monads 和 Haskell 的新手,并试图了解如何在使用它们时返回一个值。我的代码如下所示:

我尝试使用snd (snd b),但显然State MyState B不是元组?如何返回所需的值(B "b")

编辑:考虑到丹尼尔的建议,重写看起来像这样:

这仍然会导致编译错误:

编辑2:固定!最终版本如下所示: