> lines' :: String -> [String] > lines' [] = [] > lines' (x:xs) = f x (lines' xs) > f :: Char -> [String] -> [String] > f '\n' xss = "" : xss > f x xss = (x:ys) : yss > where ~(ys,yss) = case xss of [] -> ([],[]) > (ys:yss) -> (ys,yss) > main = interact (unlines . lines')