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]