我有一个返回 monad 的 Haskell 函数,声明如下:
data Options = Options {
optGames :: Int,
optSuits :: Int,
optVerbose :: Bool
} deriving Show
playGame :: Options -> StateT StdGen (WriterT [String] IO)) Bool
此函数玩单人纸牌游戏,然后返回一个指示胜利或失败的 bool 值,以及 WriterT
monad 中的日志。
我想调用此函数一定次数,每次使用随机生成器 (StdGen
) 的“下一个”值,并连接 Bool
将值返回到列表中。
我尝试创建一个递归函数来执行调用,但无法弄清楚如何将 monad 传递到每个下一个迭代中。
我想效仿
initial state >>= playGame >>= playGame ... -- repeat N times
并收集所有生成的 Bool
值,以及来自 WriterT
monad 的日志条目。
最好的方法是什么?
最佳答案
我认为您正在寻找replicateM
。这会重复给定的操作指定的次数,并以列表形式返回结果。因此,replicateM n playGame
相当于玩游戏 n
次并获取结果列表。
关于haskell - 重复调用 Haskell monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10955889/