Haskell aligned plain-text table renderer

Haskell
import Data.List (intercalate, transpose)

data Align = L | R

renderTable :: [Align] -> [[String]] -> String
renderTable _ [] = ""
renderTable aligns rows@(header : body) = unlines (line header : divider : map line body)
  where
    widths = map (maximum . map length) (transpose rows)
    line cells = intercalate " | " (zipWith3 pad aligns widths cells)
    divider = intercalate "-+-" (map (\w -> replicate w '-') widths)
    pad L w s = s ++ replicate (w - length s) ' '
    pad R w s = replicate (w - length s) ' ' ++ s