module Text.Tabular.Csv where

import Data.List (intersperse, transpose)
import Text.CSV (printCSV)
import Text.Tabular

-- | for simplicity, we assume that each cell is rendered
--   on a single line
render :: (rh -> String)
       -> (ch -> String)
       -> (a -> String)
       -> Table rh ch a
       -> String
render fr fc f (Table rh ch cells) =
  printCSV $ chStrings : cells2
 where
  -- cell2 includes the row and column labels
  cells2 = zipWith (\h cs -> h : map f cs) rhStrings cells
  chStrings = map fc $ headerContents ch
  rhStrings = map fr $ headerContents rh