+module ListUtils
+( pad_left_to,
+ pad_right_to,
+ splitWith
+) where
+
+
+-- Stolen from ByteString. Splits a list at each element satisfying
+-- the predicate p.
+splitWith :: (a -> Bool) -> [a] -> [[a]]
+splitWith p xs =
+ ys : case zs of
+ [] -> []
+ _:ws -> splitWith p ws
+ where (ys,zs) = break p xs
+
+
+-- Pads a list (on the left) to length len by prepending pad_elem.
+pad_left_to :: Int -> a -> [a] -> [a]
+pad_left_to len pad_elem xs =
+ if (length xs) >= len then
+ xs
+ else
+ (replicate padcount pad_elem) ++ xs
+ where
+ padcount = len - (length xs)
+
+
+-- Pads a list (on the right) to length len by appending pad_elem.
+pad_right_to :: Int -> a -> [a] -> [a]
+pad_right_to len pad_elem xs =
+ if (length xs) >= len then
+ xs
+ else
+ xs ++ (replicate padcount pad_elem)
+ where
+ padcount = len - (length xs)