hascard-0.2.1.0: src/DeckHandling.hs
module DeckHandling where
import Data.Random
import Lens.Micro.Platform
import States
import Types
doRandomization :: GlobalState -> [Card] -> IO [Card]
doRandomization state cards =
let n = length cards in do
cards' <- if state^.doShuffle then sampleFrom (state^.mwc) (shuffleN n cards) else return cards
return $ maybe cards' (`take` cards') (state^.subset)
doChunking :: Chunk -> [Card] -> [Card]
doChunking (Chunk i n) cards =
splitIntoNChunks n cards !! (i-1)
splitIntoNChunks :: Int -> [a] -> [[a]]
splitIntoNChunks n xs =
let (q, r) = length xs `quotRem` n
qs = replicate n q
rs = replicate r 1 ++ repeat 0
chunkSizes = zipWith (+) qs rs
in makeChunksOfSizes chunkSizes xs
makeChunksOfSizes :: [Int] -> [a] -> [[a]]
makeChunksOfSizes [] _ = []
makeChunksOfSizes (n:ns) xs =
let (chunk, rest) = splitAt n xs
in chunk : makeChunksOfSizes ns rest