Generalized version of `words'?

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

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

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 Data.PackedString are splitPS and splitWithPS. splitPS :: Char -> PackedString -> [PackedString] The splitPS function splits the input string on each occurrence of the given Char. splitWithPS :: (Char -> Bool) -> PackedString -> [PackedString] The splitWithPS function takes a character predicate and splits the input string at each character which satisfies the predicate.
participants (2)
-
Christian Maeder
-
Dimitry Golubovsky