Fish Wang says to YSITD function add(a, ...others) { return others.length? a: add(subAdd(a, others[0]), others.slice(1)) } function subAdd(a, b) { return b.S? subAdd({S: a}, b.S): a }