31 lines
797 B
JavaScript
31 lines
797 B
JavaScript
export const compareSlots = compareElems => slotA => slotB => {
|
|
if (slotA.depth < slotB.depth) {
|
|
return -1;
|
|
}
|
|
if (slotB.depth < slotA.depth) {
|
|
return 1;
|
|
}
|
|
return compareValues(compareElems)(slotA.value)(slotB.value);
|
|
};
|
|
|
|
export const compareValues = compareElems => valA => valB => {
|
|
if (valA.kind < valB.kind) {
|
|
return -1;
|
|
}
|
|
if (valB.kind < valA.kind) {
|
|
return 1;
|
|
}
|
|
if (valA.kind === "literal") {
|
|
return compareElems(valA.out)(valB.out);
|
|
}
|
|
if (valA.kind === "read") {
|
|
return compareSlots(compareElems)(valA.slot)(valB.slot);
|
|
}
|
|
if (valA.kind === "transformation") {
|
|
const cmpIn = compareValues(compareElems)(valA.in)(valB.in);
|
|
if (cmpIn !== 0) {
|
|
return cmpIn;
|
|
}
|
|
return compareValues(compareElems)(valA.fn)(valB.fn);
|
|
}
|
|
};
|