Как использовать newStdGen или getStdGen вместо mkStdGen в Haskell

Пытаюсь решить проблему 23из 99 проблем Haskell.

И я написал это

rnd_select :: (Eq a) => [a] -> Int -> [a]
rnd_select [] _ = []
rnd_select _ 0 = []
rnd_select ys n = 
   let 
       (rnd_index, gen) = randomR (1, length ys) (mkStdGen 200)
       (x, xs) = removeAt rnd_index ys
   in x : rnd_select xs (n-1)

, которое работает, но я не хочу использовать mkStdGen, а использую

  newStdGen or getStdGen

вместо. Я видел решения проблемы, но я хочу понять, как мне исправить этот код, чтобы сделать это, и если это невозможно, почему бы и нет, потому что интуитивно кажется, что он должен работать, но это не так.

5
задан patternexon 19 April 2012 в 01:33
поделиться