重复调用Haskell monad

Ral*_*lph 3 haskell loops monad-transformers

我有一个返回monad的Haskell函数,声明如下:

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

playGame :: Options -> StateT StdGen (WriterT [String] IO)) Bool
Run Code Online (Sandbox Code Playgroud)

此函数播放一个单人游戏,然后返回一个表示赢或输的布尔值,以及WriterTmonad中的日志.

我想调用此函数一定次数,每次使用random generator(StdGen)的"next"值,并将Bool返回值连接到一个列表中.

我尝试创建一个递归函数来执行调用,但无法弄清楚如何将monad传递到每个下一次迭代.

我想效仿

initial state >>= playGame >>= playGame ... -- repeat N times
Run Code Online (Sandbox Code Playgroud)

并收集所有结果Bool值,以及WriterTmonad中的日志条目.

做这个的最好方式是什么?

Tik*_*vis 9

我想你在找replicateM.这会将指定的操作重复指定的次数,并将结果作为列表返回.因此,replicateM n playGame对应于播放游戏n时间并返回结果列表.