我有一个Haskell函数,它返回一个monad,声明如下:
data Options = Options {
optGames :: Int,
optSuits :: Int,
optVerbose :: Bool
} deriving Show
playGame :: Options -> StateT StdGen (WriterT [String] IO)) Bool此函数玩单人纸牌游戏,然后返回一个指示输赢的布尔值,以及WriterT monad中的日志。
我想调用这个函数一定的次数,每次都使用随机生成器(StdGen)的"next“值,并将Bool返回值连接到一个列表中。
我尝试创建一个递归函数来执行调用,但不知道如何将monad传递到下一次迭代中。
我想效仿一下
initial state >>= playGame >>= playGame ... -- repeat N times并收集所有生成的Bool值,以及来自WriterT monad的日志条目。
做这件事最好的方法是什么?
发布于 2012-06-09 05:08:26
我想你是在找replicateM吧。这会将给定的操作重复指定的次数,并以列表形式返回结果。因此,replicateM n playGame相当于玩游戏n次并获得结果列表。
https://stackoverflow.com/questions/10955889
复制相似问题