[Haskell-cafe] wordsBy in the base libraries?
ndmitchell at gmail.com
Mon Oct 22 06:36:23 EDT 2007
> > You are still over by one test. Try instead:
> > wordsBy :: (a -> Bool) -> [a] -> [[a]]
> > wordsBy p s = case dropWhile p s of
> >  -> 
> > s':rest -> (s':w) : wordsBy p (drop 1 s'')
> > where (w, s'') = break p rest
> This still has the redundant empty list tests,
Perhaps. Something like SpecConstr can remove them. Also remember that
p may be arbitrarily expensive, while a test for an empty list is
cheap. In the particular case of words, p (i.e. isSpace) is very
> and in fact introduces another one in drop 1,
> as well as some gratuitous arithmetic.
The actual version I use is drop1, where drop1 is defined as:
drop1  = 
drop1 (x:xs) = xs
Also known as safeTail in the "Safe" library.
More information about the Haskell-Cafe