module Data.List.Tools ( takeUntil , dropUntil , mulLists , defaultElem ) where takeUntil :: (a -> Bool) -> [a] -> [a] dropUntil :: (a -> Bool) -> [a] -> [a] takeUntil _ [] = [] takeUntil p (x:xs) | p x = [x] | otherwise = x : takeUntil p xs dropUntil _ [] = [] dropUntil p (x:xs) | p x = xs | otherwise = dropUntil p xs mulLists :: [[a]] -> [[a]] mulLists [] = [[]] mulLists (xs:xss) = [ x:xs_ | x <- xs, xs_ <- mulLists xss ] defaultElem :: a -> [a] -> [a] defaultElem dflt [] = [ dflt ] defaultElem _ lst = lst