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 モナドなしでは画面に何も出力できないため、これはあまり興味深いものではありません。
playGame で再帰を維持しながら、この関数を IO モナドでラップするにはどうすればよいですか?