5

次のように宣言されたモナドを返す Haskell 関数があります。

data Options = Options {
    optGames :: Int,
    optSuits :: Int,
    optVerbose :: Bool
  } deriving Show

playGame :: Options -> StateT StdGen (WriterT [String] IO)) Bool

この関数は、1 ゲームのソリティアをプレイし、勝敗を示すブール値とWriterTモナドのログを返します。

この関数を一定回数呼び出したいと思います。そのたびに、ランダム ジェネレーターの「次の」値 ( ) を使用し、戻り値をリストにStdGen連結します。Bool

呼び出しを行う再帰関数を作成しようとしましたが、モナドを次の各反復に渡す方法がわかりません。

真似したい

initial state >>= playGame >>= playGame ... -- repeat N times

結果のすべての値と、モナドBoolからのログエントリを収集します。WriterT

これを行う最善の方法は何ですか?

4

1 に答える 1

11

を探していると思いますreplicateM。これは、指定されたアクションを指定された回数繰り返し、結果をリストとして返します。したがってreplicateM n playGame、ゲームn時間をプレイして結果のリストを取得することに対応します。

于 2012-06-08T21:08:26.077 に答える