繁体   English   中英

使用状态monad的过时状态

[英]Out-of-date state using state monad

这是一个使用状态monad的功能runGame

runGame = do
    state <- get
    addPoints
    let newState = ...modify state in some way...
    put newState
  1. 我得到状态
  2. 我修改它
  3. 我把新的状态。

现在假设我也修改了addPoints的状态:

addPoints = do
  modify (+1)

问题是,我在runGame的状态现在已过时。 因此,当我修改该状态并将其放回原处时,我已经取消了addPoints的更改。

解决这个问题的好方法是什么? 我不想在每次函数调用“以防万一”后修改状态后重新get状态。 我可以切换到始终使用modify而不是getput但这会使我的代码尴尬。

您正在寻找对状态的原子/事务修改,这几乎就是modify提供的。 这是不可能的“滑”的之间的一些状态修改操作getputmodify 如果不使用它,则必须管理确保在getput之间什么都不会发生的复杂性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM