> spanLines :: String -> [String] > spanLines "" = [] > spanLines s = let (l, s') = span' s > in l : case s' of > [] -> [] > (_:s'') -> spanLines s'' > span' [] = ([],[]) > span' xs@(x:xs') > | '\n' /= x = (x:ys, zs) > | otherwise = ([],xs) > where ~(ys,zs) = span' xs' > main = interact (unlines . spanLines)