我正在尝试用Yesod实现类似Pachisi的棋盘游戏。目前,Haskell代码通过Ajax接收电路板的当前状态,用它做一些事情(例如计算新部件是否可以进入电路板,游戏是否结束等等)并将其作为客户端可以使用的JSON返回更新视图。
实际上,我在客户端保持状态以避免Haskell没有可变性的问题。在其他语言中,我可能会声明一个变量gameState
并让服务器端代码在将其返回给客户端之前对其进行修改,但在Haskell中......我可能完全错过了一些东西;在Haskell方面,我远没有经验。
我想尽可能少地做客户端,因为这应该是一个很好的练习。我发现Haskell: Yesod and state但是真的没有意义。所以问题仍然存在:有没有比我的解决方案更好的方法来处理游戏状态?
答案 0 :(得分:4)
这很简单。 Yesod的机器围绕称为Foundation
的数据类型旋转。在脚手架中,这种数据类型具有相同的名称,甚至。
您需要做的是使用代表您的状态MVar YourState
的记录来扩展此数据类型。
现在,在Handler
操作中,您可以使用y <- getYesod
获取Foundation值,从中提取MVar并根据您的意愿使用/修改它。