Interesting way to solve this problem, but quite limiting.
Another way to solve the problem would be to make an implementation available only when it is imported or explicitly declared to be used. This way you could even provide multiple implementations for various use cases your own.
If I am not mistaken, the type classes keep for Kotlin was designing a way of declaring the implementation, combined with some way of implicitly doing it.