{ type Delegator F init(d:Delegator) d.delegate = null F default_impl(d:Delegator) 'default implementation' F operation(d:Delegator) default_impl(d) F operation(d:Delegator) { guard defined thing guard thing is Fun try { d.delegate.thing() } catch(e:ImplNotFound) { # Might be unrelated exception, so check and optionally rethrow e.callable !== thing throws e default_impl(d) } } F operation(d:Delegator) { guard d.delegate is Null default_impl(d) } a = Delegator() echo(a.operation()) # There is no method thing(s:Str) a.delegate = "abc" echo(a.operation()) # ... now there is method thing(s:Str) F thing(s:Str) 'delegate implementation' echo(a.operation()) }