我有一个返回 monad 的 Haskell 函数,声明如下:
data Options = Options {
optGames :: Int,
optSuits :: Int,
optVerbose :: Bool
} deriving Show
playGame :: Options -> StateT StdGen (WriterT [String] IO)) Bool
此函数玩单人纸牌游戏,然后返回一个指示输赢的布尔值,以及WriterT
monad 中的日志。
我想调用这个函数一定次数,每次都使用随机生成器(StdGen
)的“下一个”值,并将Bool
返回值连接到一个列表中。
我尝试创建一个递归函数来执行调用,但无法弄清楚如何将 monad 传递到下一次迭代中。
我想效仿
initial state >>= playGame >>= playGame ... -- repeat N times
并收集所有结果Bool
值,以及来自WriterT
monad 的日志条目。
做这个的最好方式是什么?