let rec merge_impl = fun base override => if (std.typeof base) == "record" && (std.typeof override) == "record" then let base_fields = std.record.fields base in base_fields |> std.array.fold_left (fun acc key => let base_value = base |> std.record.get key in if std.record.has_field key override then let override_value = override |> std.record.get key in acc |> std.record.insert key override_value else acc |> std.record.insert key base_value ) {} else override in { merge = merge_impl }