Haskell: Draw tabulated data given header and rows as lists
It might make sense to use a pretty-printing library to do this.  You can use pretty along with the extension pretty-ncols package; or possibly boxes would work as it's aimed at more 2D textual information.