How about this:
wordsBy :: (a -> Bool) -> [a] -> [[a]]
wordsBy p (x:xs) = if p x then wordsBy p xs
else let (w, t) = getNextWord xs in (x:w) : t
where
getNextWord (x:xs) = if p x then ([], wordsBy p xs)
else let (w, t) = getNextWord xs in (x:w, t)
getNextWord _ = ([], [])
wordsBy _ _ = []
(yuck)
-Yitz