\begin{code} -- todo: support uneven column lengths module Lib.TextFormat where import Data.List columns :: String -> [[String]] -> [String] columns delim = map (concat . intersperse delim) . transpose . extend extend :: [[String]] -> [[String]] extend cs = zipWith pad (sizes cs) cs -- mkrow rsizes = concat . intersperse "^" . zipWith pad rsizes pad :: Int -> [String] -> [String] pad n = map (pad1 n) where pad1 o text = text ++ take (o - length text) (repeat ' ') sizes :: [[String]] -> [Int] sizes = map (maximum . map length) \end{code}