compare = {
const recursiveCompare = (a, b) => {
if (typeof a === 'number' && typeof b === 'number') {
return clamp(-1, 1, a - b)
}
if (typeof a === 'number') return recursiveCompare([a], b)
if (typeof b === 'number') return recursiveCompare(a, [b])
const firstDefinitiveComparison = a.reduce((acc, _, i) => (acc || b[i] === undefined) ? acc : recursiveCompare(a[i], b[i]), 0)
return firstDefinitiveComparison || recursiveCompare(a.length, b.length)
}
return recursiveCompare
}