30 lines
981 B
XML
30 lines
981 B
XML
# Test: Manual merge without fold
|
|
{
|
|
# Hardcoded merge for 2-field record
|
|
merge_manual = fun base override =>
|
|
let base_fields = std.record.fields base in
|
|
let has_field_0 = std.array.length base_fields > 0 in
|
|
let has_field_1 = std.array.length base_fields > 1 in
|
|
|
|
let key0 = if has_field_0 then std.array.at 0 base_fields else "" in
|
|
let key1 = if has_field_1 then std.array.at 1 base_fields else "" in
|
|
|
|
let val0 = if has_field_0 then std.record.get key0 base else null in
|
|
let val1 = if has_field_1 then std.record.get key1 base else null in
|
|
|
|
let result0 = if has_field_0 then
|
|
if std.record.has_field key0 override then
|
|
{"%{key0}" = std.record.get key0 override}
|
|
else
|
|
{"%{key0}" = val0}
|
|
else {} in
|
|
|
|
let result1 = if has_field_1 then
|
|
if std.record.has_field key1 override then
|
|
{"%{key1}" = std.record.get key1 override}
|
|
else
|
|
{"%{key1}" = val1}
|
|
else {} in
|
|
|
|
result0 & result1,
|
|
}
|