リストlst
と数値を指定すると、次のコードは、指定されたリストとは異なる要素をn
持つリストを出力します。n
lst
rndsel :: (Eq a, RandomGen g) => [a] -> g -> Int -> [a]
rndsel lst _ 0 = []
rndsel lst g n = schar:(rndsel rem g (n-1))
where schar = lst !! index
index = head $ randomRs (0, ll-1) g
ll = length lst
rem = delete schar lst
読みやすさ、雄弁さの点でこのコードを改善できる方法があるかどうか、またより慣用的な Haskell コードにすることができるかどうかを知りたいです。