Also, while Kotlin doesn't have structural typing, it can kind of emulate it well with multiple receivers which are coming soon. As in you define an interface with the typing and then you require an implemented of that interface for a specific type as one of your receivers. It isn't really structural typing but it kind of looks like it which IMO is good enough. I suspect though that someone will come up with a compiler plugin at some point that automatically generates structural definitions of most functions and implements them automatically, which actually isn't really rocket science once we have multiple receivers