我正在尝试在 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
在哪里
checkForWinner :: RandomGen g => State (GameState g) (Maybe (Player, Int))
playRound :: RandomGen (g) => State (GameState g) ()
但这并不是很有趣,因为没有 IO monad,我无法将任何内容输出到屏幕上。
如何在保持 playGame 递归的同时将此函数包装在 IO monad 中?