--

You can change function’s name for JVM, leaving its Kotlin name unchanged:

@JvmName("applyFunction")
fun <A, B> Option<A>.apply(o: Option<(A) -> B>) { ... }
@JvmName("applyToFunction")
fun <A, B> Option<(A) -> B>.apply(o: Option<A>) { ... }

--

--