Lua table deep clone and recursive merge

Lua
local function clone(v) -- acyclic tables
  if type(v) ~= 'table' then return v end
  local out = {}
  for k, val in pairs(v) do out[clone(k)] = clone(val) end
  return out
end

local function merge(base, override)
  local out = clone(base)
  for k, v in pairs(override) do
    if type(v) == 'table' and type(out[k]) == 'table' then
      out[k] = merge(out[k], v)
    else
      out[k] = clone(v)
    end
  end
  return out
end

return { clone = clone, merge = merge }