]> gitweb.michael.orlitzky.com - hath.git/blobdiff - src/ListUtils.hs
Separate a few functions out in to a ListUtils module.
[hath.git] / src / ListUtils.hs
diff --git a/src/ListUtils.hs b/src/ListUtils.hs
new file mode 100644 (file)
index 0000000..5ec9120
--- /dev/null
@@ -0,0 +1,37 @@
+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)