module Data.Yarr.Utils.Split where
makeSplitIndex
:: Int
-> Int
-> Int
-> (Int -> Int)
makeSplitIndex chunks start end =
let !len = end start
in if len < chunks
then \c -> start + (min c len)
else let (chunkLen, chunkLeftover) = len `quotRem` chunks
in \c -> if c < chunkLeftover
then start + c * (chunkLen + 1)
else start + c * chunkLen + chunkLeftover
evenChunks
:: [a]
-> Int
-> [[a]]
evenChunks xs n =
let len = length xs
splitIndex = makeSplitIndex n 0 len
chunk i =
let s = splitIndex i
e = splitIndex (i + 1)
in take (e s) (drop s xs)
in map chunk [0..n1]