import { Char, Double, Int } from "../primitives/types.js"; 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; }; export const typeToCmp = new Map([ [Int, compareNumbers], [Char, compareStrings], [Double, compareNumbers], [Boolean, compareBools], ]);