module Prelude where lines :: String -> [String] -- specification in the Report: -- lines "" = [] lines s = let (l,s') = break (== '\n') s in l : case s' of [] -> [] (_:s'') -> lines s'' -- more efficient but less lazy: -- -- lines = foldr f [] -- where -- f '\n' xss = "" : xss -- f x [] = [[x]] -- f x (ys:yss) = (x:ys) : yss -- more efficient still: -- -- lines [] = [] -- lines (x:xs) = f x (lines xs) -- where -- f '\n' xss = "" : xss -- f x [] = [[x]] -- f x (ys:yss) = (x:ys) : yss -- even more efficient: -- -- lines s = lines' s id -- where -- lines' [] acc = [acc []] -- lines' ('\n':s) acc = acc [] : lines' s id -- lines' (c:s) acc = lines' s (acc . (c:))