Haskell Monad State:获取并修改

时间:2017-07-16 18:20:00

标签: haskell monads state-monad

我对monad状态下获取和修改的定义感到困惑。

Somewhere说:

获取:"使用提供的投影函数"获取状态的特定组件。

modify:将旧状态映射到状态monad中的新状态。旧州被扔掉了。

这意味着我们可以使用modify直接为状态组件分配值,例如here

somewhere否则说我们可以使用modify和gets来提供一个函数来声明状态和结果。

它似乎都有效,但我不清楚哪个工作在哪里!

1 个答案:

答案 0 :(得分:1)

你从未引用第二次引用,所以我在这个答案中忽略它。如果你澄清问题的那一部分,那么我会尝试回答它。

你引用的消息来源说:

gets :: MonadState s m => (s -> a) -> m a Source #
Gets specific component of the state, using a projection function supplied.

modify :: MonadState s m => (s -> s) -> m () Source #
Monadic state transformer.
Maps an old state to a new state inside a state monad.

因此,对于gets,您可以提供函数s -> a,并在将该函数应用于当前状态后返回a。对于modify,您提供了一个函数s -> s,而新状态是您的函数应用于旧状态的结果。