用shuffleM列出洗牌

时间:2015-01-16 19:22:59

标签: haskell

我尝试编写一个获取列表并对其进行排列的函数。在ghci,我可以这样做:

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

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

1 个答案:

答案 0 :(得分:2)

你可以做到

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。然后,您可以像处理任何其他列表一样处理混洗列表。