
Here is my version: -- | split list at separator elements, avoid empty sublists splitBy :: Eq a => a -> [a] -> [[a]] splitBy x xs = let (l, r) = break (==x) xs in (if null l then [] else [l]) ++ (if null r then [] else splitBy x $ tail r) -- suffix "By" usually indicates a (a -> a -> Bool) argument instead of Eq An earlier discussion about such a function did not end in a conclusion. There are so many variants/generalizations and no agreement for a name. Christian Dimitry Golubovsky wrote:
Does there exist a generalized version of the `words' function i. e. one that breaks an arbitrary list into parts by an arbitrary predicate?
splitAt is not what I need.
I had to write my own:
-- A version of words, but works with any lists on any predicate.
parts pred s = case dropWhile pred s of [] -> [] s' -> w : parts pred s'' where (w, s'') = break pred s'
(just by parameterizing `words' found in Data.List with a predicate passed as a parameter).
In case such a function already exists, what is its name?
In the opposite case, can such a function be added to the standard library? (or why didn't it exist?)
Dimitry Golubovsky Middletown, CT