5

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

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

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

此函数玩单人纸牌游戏,然后返回一个指示输赢的布尔值,以及WriterTmonad 中的日志。

我想调用这个函数一定次数,每次都使用随机生成器(StdGen)的“下一个”值,并将Bool返回值连接到一个列表中。

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

我想效仿

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

并收集所有结果Bool值,以及来自WriterTmonad 的日志条目。

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

4

1 回答 1

11

我想你正在寻找replicateM. 这会将给定的操作重复指定次数,并将结果作为列表返回。所以replicateM n playGame对应于玩游戏n时间并返回结果列表。

于 2012-06-08T21:08:26.077 回答