使用 shuffleM 进行列表洗牌

List shuffling with shuffleM

我尝试编写一个函数,它接受一个列表并给出它的排列。在 ghci 中我可以做这样的事情:

>let xs=[1..10]
>ys <- shuffleM xs

xs 和 ys 都是 [Integer] 类型,而 ys 确实是 xs 的排列。我想在程序中获得相同的效果,因为洗牌后我需要进一步使用 ys 。怎么做到的?

你可以

main :: IO ()
main = do
    let xs = [1..10]
    ys <- shuffleM xs
    print $ doSomething ys

doSomething :: [Integer] -> Integer
doSomething = sum

例如。我不确定 shuffleM 来自哪里,但如果它来自 random-shuffle 库,那么你只需要在实现 MonadRandom 的 monad 中使用它,其中包括 IO .然后您可以像处理任何其他列表一样处理随机列表。