Scala deep-clone and merge for a JSON tree

Scala
enum Json:
  case Str(value: String)
  case Num(value: Double)
  case Arr(items: Vector[Json])
  case Obj(fields: Map[String, Json])

def deepClone(value: Json): Json = value match
  case Json.Str(s) => Json.Str(s)
  case Json.Num(n) => Json.Num(n)
  case Json.Arr(xs) => Json.Arr(xs.map(deepClone))
  case Json.Obj(fs) => Json.Obj(fs.map((k, v) => k -> deepClone(v)))

def deepMerge(base: Json, overlay: Json): Json = (base, overlay) match
  case (Json.Obj(a), Json.Obj(b)) =>
    Json.Obj(b.foldLeft(a) { case (acc, (k, v)) =>
      acc.updated(k, acc.get(k).fold(deepClone(v))(existing => deepMerge(existing, v)))
    })
  case _ => deepClone(overlay)