ifclass F0 static A pcallF_typed(F0 f) { pcall { ret f?!; } null; } endif ifclass F1 static B pcallF_typed(F1 f, A a) { pcall { ret f?.get(a); } null; } endif ifclass VF1 static void pcallF_typed(VF1 f, A a) { pcall { f?.get(a); } } endif static void pcallF_typed(IVF1 f, A a) { pcall { f?.get(a); } } static void pcallF_typed(IVF2 f, A a, B b) { pcall { f?.get(a, b); } } sO pcallF_typed(Runnable r) { pcall { r?.run(); } null; } static A pcallF_typed(IF0 f) { pcall { ret f?!; } null; } static B pcallF_typed(IF1 f, A a) { pcall { ret f?.get(a); } null; }