Я просто переписал реализацию haskell в js.
const rev = (list, reversed) => { if (list.length == 0) return reversed reversed.unshift(list[0]) return rev(list.slice(1), reversed) } const reverse = (list) => rev(list, [])