module Utility.Table where
type Table = [[String]]
tableWithHeader :: [String] -> [[String]] -> Table
tableWithHeader header rows = header : map linesep header : rows
where
linesep = map (const '-')
formatTable :: Table -> [String]
formatTable table = map (\r -> unwords (map pad (zip r colsizes))) table
where
pad (cell, size) = cell ++ take (size - length cell) padding
padding = repeat ' '
colsizes = reverse $ (0:) $ drop 1 $ reverse $
sumcols (map (map length) table)
sumcols [] = repeat 0
sumcols [r] = r
sumcols (r1:r2:rs) = sumcols $ zipWith max r1 r2 : rs