import List
splitAtElem :: Eq a => a -> [a] -> [[a]]
splitAtElem _ [] = [[]]
splitAtElem e xs = pre : if null post then [] else splitAtElem e (tail post)
where (pre, post) = break (== e) xs
splitAtSublist :: Eq a => [a] -> [a] -> [[a]]
splitAtSublist _ [] = [[]]
splitAtSublist sub xs = case findSublist sub xs of
Just n -> take n xs : splitAtSublist sub (drop (length sub + n) xs)
Nothing -> [xs]
findSublist :: Eq a => [a] -> [a] -> Maybe Int
findSublist sub list = find (\i -> isPrefixOf sub (drop i list))
(elemIndices (head sub) list)