module Text.Tabular.Csv where
import Data.List (intersperse, transpose)
import Text.CSV (printCSV)
import Text.Tabular
render :: (rh -> String)
-> (ch -> String)
-> (a -> String)
-> Table rh ch a
-> String
render :: forall rh ch a.
(rh -> String)
-> (ch -> String) -> (a -> String) -> Table rh ch a -> String
render rh -> String
fr ch -> String
fc a -> String
f (Table Header rh
rh Header ch
ch [[a]]
cells) =
CSV -> String
printCSV forall a b. (a -> b) -> a -> b
$ [String]
chStrings forall a. a -> [a] -> [a]
: CSV
cells2
where
cells2 :: CSV
cells2 = forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\String
h [a]
cs -> String
h forall a. a -> [a] -> [a]
: forall a b. (a -> b) -> [a] -> [b]
map a -> String
f [a]
cs) [String]
rhStrings [[a]]
cells
chStrings :: [String]
chStrings = String
"" forall a. a -> [a] -> [a]
: (forall a b. (a -> b) -> [a] -> [b]
map ch -> String
fc forall a b. (a -> b) -> a -> b
$ forall h. Header h -> [h]
headerContents Header ch
ch)
rhStrings :: [String]
rhStrings = forall a b. (a -> b) -> [a] -> [b]
map rh -> String
fr forall a b. (a -> b) -> a -> b
$ forall h. Header h -> [h]
headerContents Header rh
rh