I know that Swift handles this differently. I just meant that they do this static analysis and copy methods in order to have static dispatch. This is possible in Kotlin either.
Regarding Uber-Ugly interface: I would just put this parameter where it is really needed (in the function body this information is used or a method is called, that uses this information; this can be evaluated locally).