///|
fn[T] pdf_print_tree_root(
  output : Array[String],
  indent : String,
  value : T,
  get_name : (T) -> String,
  get_children : (T) -> Array[T],
) -> Unit {
  output.push(get_name(value))
  output.push("\n")
  let children = get_children(value)
  for index in 0.. String,
  get_children : (T) -> Array[T],
  line_prefix? : String = "",
) -> String {
  let output : Array[String] = [line_prefix]
  pdf_print_tree_root(output, line_prefix, value, get_name, get_children)
  output.join("")
}