sclass FG extends F1 { F1 f, g; *() {} *(F1 *f, F1 *g) {} O get(O o) { ret f.get(g.get(o)); } } static O fg(fO f, fO g) { ret FG(f1(f), f1(g)); } static O fg(fO f, fO g, fO h) { ret fg(f, fg(g, h)); }