我对monad状态下获取和修改的定义感到困惑。
获取:"使用提供的投影函数"获取状态的特定组件。
modify:将旧状态映射到状态monad中的新状态。旧州被扔掉了。
这意味着我们可以使用modify直接为状态组件分配值,例如here。
但somewhere否则说我们可以使用modify和gets来提供一个函数来声明状态和结果。
它似乎都有效,但我不清楚哪个工作在哪里!
答案 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
,而新状态是您的函数应用于旧状态的结果。