Aligned plain-text table renderer in Nim

Nim
import std/[strutils, sequtils]

proc formatRow(cells: seq[string]; widths: seq[int]): string =
  for i, cell in cells:
    if i > 0: result.add(" | ")
    result.add(cell.alignLeft(widths[i]))

proc renderTable(headers: seq[string]; rows: seq[seq[string]]): string =
  var widths = newSeq[int](headers.len)
  for i, h in headers: widths[i] = h.len
  for row in rows:
    for i, cell in row:
      if cell.len > widths[i]: widths[i] = cell.len
  result.add(formatRow(headers, widths))
  result.add("\n" & widths.mapIt(repeat("-", it)).join("-+-"))
  for row in rows:
    result.add("\n" & formatRow(row, widths))

echo renderTable(@["name", "lang"], @[@["ada", "nim"], @["grace", "cobol"]])