# splitWith function for splitting a list doesn't seem optimal

As an exercise from RWH, I needed to write a function that splits a list every time the predicate is false (words == splitWith (== ' ') for strings):

splitWith :: (a -> Bool) -> [a] -> [[a]]
splitWith _ [] = []
splitWith p xs
| null pre = splitWith p post'
| otherwise = pre : splitWith p post'
where
(pre, post) = break p xs
post' = if null post then [] else tail post


My concern is the if..then..else chain; it seems "forced". I have to make sure that post isn't null, or it will crash on the call to tail.

Is there a better way to write this?

You can gin up a safe version of tail lickety-split by using drop 1.