sclass AbstractSayAndInputBot { VF1 say; // primary output listener L onOutput; // more output listeners (L>) F0 input; void say(S s) { callF(say, s); pcallFAll(onOutput, s); } void say(Iterable l) { for unnull (S s : l) say(s); } S input() { ret callF(input); } }