小编sto*_*zly的帖子

IO和状态monad的递归

我正在尝试在Haskell中实现一个游戏.我有一个GameState类型,可以管理得分,玩家和回合等内容,其中回合是RoundState类型,用于管理游戏的细节.为了玩游戏,我有一个功能

playGame :: (RandomGen g) => State (GameState g) (Player, Int)
playGame = do playRound
              winner <- checkForWinner
              case winner of 
                  Nothing -> playGame
                  Just x -> return x
Run Code Online (Sandbox Code Playgroud)

哪里

checkForWinner :: RandomGen g => State (GameState g) (Maybe (Player, Int))
playRound :: RandomGen (g) => State (GameState g) ()
Run Code Online (Sandbox Code Playgroud)

这不是很有趣,因为没有IO monad,我无法向屏幕输出任何内容.

如何在IO monad中包装此函数,同时保持在playGame上的递归?

io monads haskell

3
推荐指数
1
解决办法
221
查看次数

标签 统计

haskell ×1

io ×1

monads ×1