
splitBy :: (a -> Bool) -- ^ whether element is a seperator -> [a] -- ^ list to split -> [[a]]
P.S. inspecting more than one element looks like an over-generalization to me and should be left to parsers or regexp libs.
It's more generally useful if you don't drop the separators from the output: splitSepWith f = map (dropWhile f) . splitWith f spaces = splitSepWith Char.isSpace But this still won't let you split on comma and spaces. Either regexes, or pass in a [tok] -> ([conumed], [rest]) type parser: splitWith :: ([a] -> ([a], [a])) -> [a] -> [[a]] ... but why not make it take parsec parsers and put it in a parsec util module or something (if it isn't already there!): splitWith (Parsec.char ',' >> Parsec.spaces) ... of course, then you might ask why not use Parsec.sepBy :) but maybe the "split on elt" concept is easier to learn than "write a whole parser". I guess the problem with the splitWith thing is that it's a slippery path that leads right up to full-on parsers. Python gets by nicely with a split on 1 or more spaces and a split on a constant string, so maybe those are a good compromise between generality and simplicity.