import System.IO import System.Environment main :: IO () main = do [a] <- getArgs r <- readFile a let ls = lines r a = noAdjacentBlankLines ls b = concat $ combineGroups $ group [] a putStrLn $ unlines b noAdjacentBlankLines [] = [] noAdjacentBlankLines [a] = [a] noAdjacentBlankLines ("":xs@("":_)) = noAdjacentBlankLines xs noAdjacentBlankLines (x:xs) = x:noAdjacentBlankLines xs group :: [String] -> [String] -> [[String]] group acc [] = [acc] group acc ("":xs) = reverse ("":acc) : group [] xs group acc (x:xs) = group (x : acc) xs combineGroups :: [[String]] -> [[String]] combineGroups [] = [] combineGroups (x@(('<':_):_):xs) | gs <- map trim x , ns <- trim $ unwords gs , length ns < 80 = [ns ++ "\n"] : combineGroups xs combineGroups (x:xs) = x:combineGroups xs trim :: String -> String trim = x . x where x = dropWhile (==' ') . reverse