-- | Tirages. module Htirage.Draw where import Htirage.Bits import Htirage.Combin -- | @draw1 xs bs@ retourne un choix parmi 'xs' déterminé par l’entropie 'bs'. draw1 :: [a] -> [Bool] -> a draw1 xs bs = xs !! fromInteger (randomIntegerOfBits (toInteger (length xs - 1)) bs) -- | @drawMany xs k bs@ retourne 'k' choix (sans répétition) parmi 'xs' -- déterminés par l’entropie 'bs'. drawMany :: [a] -> Integer -> [Bool] -> [a] drawMany xs k bs = (fromInteger <$> combinOfRank n k r) `permute` xs where n = toInteger (length xs) r = randomIntegerOfBits ((n`nCk`k) - 1) bs