Prelude> class HaveSize a where size :: a -> Int
Prelude> instance HaveSize [a] where size = length
Prelude> let f n = length . last . takeWhile ((>=) n . sum) . scanl (\ ls a -> [a] ++ ls) []
Prelude> let saturate n xs = take (f n $ map size xs) xs

Prelude> saturate 7 ["aa", "b", "ccc", "dd", "eee"]
["aa","b","ccc"]
Prelude> saturate 6 ["aa", "b", "ccc", "dd", "eee"]
["aa","b","ccc"]
Prelude> saturate 1 ["aa", "b", "ccc", "dd", "eee"]
[]