list_transpose_bind  <- function(x) {
  if (is.null(x) || length(x) == 0) return(x)
  purrr::reduce(x, list_transpose_bind_impl)
}

list_transpose_bind_impl <- function(x, acc) {
  if (!length(x)) return(acc)

  for (name in names(x)) {
    if (!name %in% names(x)) {
      acc[[name]] <- x[[name]]
    } else {
      acc[[name]] <- dplyr::bind_rows(acc[[name]], x[[name]])
    }
  }

  acc
}
