breakLine :: Int -> String -> String breakLine maxlen = go [] . words where go acc [] = acc go [] (w:ws) = go w ws go acc (w:ws) | length acc' <= maxlen = go acc' ws | otherwise = acc ++ "\n" ++ go w ws where acc' = acc ++ " " ++ w main = interact (unlines . map (breakLine 80) . lines)