static O smallestList_add(O l, O o) { if (l == null) ret o; if (l << Pair) ret triple(l/Pair.a, l/Pair.b, o); if (l << T3) ret new O[] {l/T3.a, l/T3.b, l/T3.c, o}; if (l instanceof O[]) ret addToObjectArray((O[]) l, o); ret pair(l, o); }