我正在尝试在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上的递归?