
Am 02.01.2012 10:44, schrieb max:
I want to write a function whose behavior is as follows:
foo "string1\nstring2\r\nstring3\nstring4" = ["string1", "string2\r\nstring3", "string4"]
Note the sequence "\r\n", which is ignored. How can I do this?
replace the sequence by something unique first, i.e. a single "\r" (and revert this change later). (Replacing a single character is easier using concatMap). HTH Christian -- | replace first (non-empty) sublist with second one in third -- argument list replace :: Eq a => [a] -> [a] -> [a] -> [a] replace sl r = case sl of [] -> error "replace: empty list" _ -> concat . unfoldr (\ l -> case l of [] -> Nothing hd : tl -> Just $ case stripPrefix sl l of Nothing -> ([hd], tl) Just rt -> (r, rt))