Haskell 哈斯克尔&x2B;SDL,不了解功能/状态用法

Haskell 哈斯克尔&x2B;SDL,不了解功能/状态用法,haskell,monads,haskell-sdl,Haskell,Monads,Haskell Sdl,注意首先,我不知道该如何命名这个问题,因为我不知道到底是什么问题 我一直在和Haskell+SDL打交道,我被卡住了。 我的GitHub回购协议如下: 第209行有一行代码: 退出游戏数据->IO() runLoop=evalStateT。runReaderT循环 main=withInit[InitEverything]$do--withInit调用为我们退出。 (gConf,gData)在论坛上进行了一些讨论之后(感谢donri),我能够找到如何正确编写get/put/modify状态函数

注意首先,我不知道该如何命名这个问题,因为我不知道到底是什么问题

我一直在和Haskell+SDL打交道,我被卡住了。 我的GitHub回购协议如下:

第209行有一行代码:


退出游戏数据->IO()
runLoop=evalStateT。runReaderT循环
main=withInit[InitEverything]$do--withInit调用为我们退出。

(gConf,gData)在论坛上进行了一些讨论之后(感谢donri),我能够找到如何正确编写get/put/modify状态函数的方法:

getGameData :: MonadState GameData m => m GameData
getGameData = get -- This line is what I couldn't figure out!

putGameData :: MonadState GameData m => GameData -> m ()
putGameData = put

modifyGameData :: MonadState GameData m => (GameData -> GameData) -> m ()
modifyGameData = modify

我没有一个具体的答案给你,因为我不熟悉SDL库,但你应该阅读Monad Transformers,以便更好地了解正在发生的事情。现实世界的Haskell有一章是关于这个的@tauli谢谢,我已经读了几个小时了。但是我似乎找不到一种方法来访问循环函数中的
GameData
,尽管通过调用它<代码>runLoop::GameConfig->GameData->IO()runLoop=evalStateT。runReaderT loop
我只能知道如何将单个字段传递给键盘处理程序。我将再次阅读这些章节:)我基本上只是复制粘贴了我的其他函数
getGameData :: MonadState GameData m => m GameData
getGameData = get -- This line is what I couldn't figure out!

putGameData :: MonadState GameData m => GameData -> m ()
putGameData = put

modifyGameData :: MonadState GameData m => (GameData -> GameData) -> m ()
modifyGameData = modify