big part of the code base still needs to be 'ported' to the updated type constructors.
29 lines
1 KiB
JavaScript
29 lines
1 KiB
JavaScript
// Total ordering of primitive types
|
|
|
|
export const compareNumbers = x => y => {
|
|
if (typeof(x) !== 'number' || typeof(y) !== 'number') {
|
|
throw new Error(`was only meant to compare numbers! got ${x} and ${y}`);
|
|
}
|
|
return (x < y) ? -1 : (x > y) ? 1 : 0;
|
|
}
|
|
|
|
export const compareStrings = x => y => {
|
|
if (typeof(x) !== 'string' || typeof(y) !== 'string') {
|
|
throw new Error(`was only meant to compare strings! got ${x} and ${y}`);
|
|
}
|
|
return (x < y) ? -1 : (x > y) ? 1 : 0;
|
|
}
|
|
|
|
export const compareBools = x => y => {
|
|
if (typeof(x) !== 'boolean' || typeof(y) !== 'boolean') {
|
|
throw new Error(`was only meant to compare booleans! got ${x} and ${y}`);
|
|
}
|
|
return x - y;
|
|
};
|
|
|
|
// The Unit-type has only one instance, which is equal to itself:
|
|
export const compareUnits = x => y => 0;
|
|
|
|
// Note: dirty assumption that every symbol has unique description.
|
|
// This will be fixed once we move from symbols to real UUIDs.
|
|
export const compareSymbols = a => b => Number(a !== b) && compareStrings(a.description)(b.description);
|