
I often need to format a list of strings using some character as a *seperator* rather than a terminator for the items. Is there some simple combinator or idiom from the Prelude or standard libraries that could be used for this purpose? I ended up defining my own variation on foldr1 to solve this (code below), but I'd be much happier using some more standard solution: -- A variation on foldr1 that takes an extra argument to be returned if -- the list is empty. foldrs :: (a -> a -> a) -> a -> [a] -> a foldrs f z [] = z foldrs f _ xs = foldr1 f xs -- Example: format a list of strings, using a comma as a seperator: mkSepStr :: [String] -> String mkSepStr xs = foldrs (\x s -> x ++ ", " ++ s) "" xs t0 = mkSepStr [] -- ==> "" t1 = mkSepStr ["hello"] -- ==> "hello" t2 = mkSepStr ["10","20","30"] -- ==> "10, 20, 30" What do the rest of you do to solve this particular problem? If there isn't a standard solution, perhaps something like foldrs would be a useful addition to the Prelude. Thanks, -antony -- Antony Courtney Grad. Student, Dept. of Computer Science, Yale University antony@apocalypse.org http://www.apocalypse.org/pub/u/antony