
Hello i end up with this data Chunk = Chunk FilePath Int Int deriving Show chunkLen :: Chunk -> Int chunkLen (Chunk _ f t) = t - f chunks :: Int -> [Chunk] -> [[Chunk]] chunks n cs = reverse $ map reverse $ go cs [[]] 0 where go :: [Chunk] -> [[Chunk]] -> Int -> [[Chunk]] go [] _ _ = [] go [x@(Chunk fn f t)] (c:cs') acc = if acc + chunkLen x < n then (x : c) : cs' else go [(Chunk fn (f + n - acc) t)] ([] : ((Chunk fn f (f + n - acc)) : c) : cs') 0 go (x@(Chunk fn f t):xs) (c:cs') acc = if acc + chunkLen x < n then go xs ((x : c) : cs') (acc + chunkLen x) else go ((Chunk fn (f + n - acc) t) : xs) ([] : ((Chunk fn f (f + n - acc)) : c) : cs') 0 But i do not find this that elegant...