Commit | Line | Data |
---|---|---|
967c39ef MM |
1 | module Formatter where |
2 | import Data.List | |
3 | ||
7b8c0e4e MM |
4 | #if __GLASGOW_HASKELL__ <= 606 |
5 | intercalate xs xss = concat (intersperse xs xss) | |
6 | #endif | |
7 | ||
967c39ef MM |
8 | padWith :: a -> Int -> [a] -> [a] |
9 | padWith _ 0 l = l | |
10 | padWith e n [] = replicate n e | |
11 | padWith e (n+1) (h:t) = h:(padWith e n t) | |
12 | ||
13 | formatTable :: [[String]] -> String | |
14 | formatTable cells = | |
15 | let columnWidths = map (\col -> maximum $ map length col) | |
16 | $ transpose cells in | |
17 | intercalate "\n" $ | |
18 | map (\row -> | |
19 | let rowCells = zipWith (padWith ' ') columnWidths row in | |
20 | intercalate " " rowCells | |
21 | ) cells |