compose_i(,,) { ($0)(($1)($2)); } compose(,) { compose_i.apply($0, $1); } double(real a) { 2 * a; } square(real a) { a * a; } main(void) { o_(compose(square, double)(40), "\n"); 0; }