https://kotlinlang.org logo
#getting-started
Title
# getting-started
m

martmists

10/03/2023, 3:50 PM
I'm trying to use
@OverloadResolutionByLambdaReturnType
but it's not working and I'm unsure why.
Copy code
// signatures:
@OverloadResolutionByLambdaReturnType
inline fun <reified L : Any, reified R : Any, reified I : Any> Series<L, I>.zipTransform(other: Series<R, I>, transform: (L, R)  -> Double?): Series<Double, I>
@OverloadResolutionByLambdaReturnType
inline fun <reified L : Any, reified R : Any, reified I : Any> Series<L, I>.zipTransform(other: Series<R, I>, transform: (L, R)  -> Float?): Series<Float, I>
@OverloadResolutionByLambdaReturnType
inline fun <reified L : Any, reified R : Any, reified I : Any> Series<L, I>.zipTransform(other: Series<R, I>, transform: (L, R)  -> Int): Series<Int?, I>
@OverloadResolutionByLambdaReturnType
inline fun <reified L : Any, reified R : Any, reified N : Any, reified I : Any> Series<L, I>.zipTransform(other: Series<R, I>, transform: (L, R)  -> N): Series<N?, I> 
@OverloadResolutionByLambdaReturnType
inline fun <reified L, reified R, reified N, reified I : Any> Series<L, I>.zipTransform(other: Series<R, I>, transform: (L?, R?)  -> N): Series<N, I>

// call site:
inline operator fun <reified I : Any> Series<Double, I>.div(other: Series<Double, I>) = zipTransform(other) { a, b -> a / b }

// error
e: file:///home/mart/git/experiments/kotlin-df/src/main/kotlin/com/martmists/koala/ops/div.kt:6:89 Overload resolution ambiguity: 
public inline fun <reified L : Any, reified R : Any, reified N : Any, reified I : Any> Series<TypeVariable(L), TypeVariable(I)>.zipTransform(other: Series<TypeVariable(R), TypeVariable(I)>, transform: (TypeVariable(L), TypeVariable(R)) -> TypeVariable(N)): Series<TypeVariable(N)?, TypeVariable(I)> defined in com.martmists.koala.ops in file _common.kt
public inline fun <reified L : Any, reified R : Any, reified I : Any> Series<TypeVariable(L), TypeVariable(I)>.zipTransform(other: Series<TypeVariable(R), TypeVariable(I)>, transform: (TypeVariable(L), TypeVariable(R)) -> Double?): Series<Double, TypeVariable(I)> defined in com.martmists.koala.ops in file _common.kt
public inline fun <reified L : Any, reified R : Any, reified I : Any> Series<TypeVariable(L), TypeVariable(I)>.zipTransform(other: Series<TypeVariable(R), TypeVariable(I)>, transform: (TypeVariable(L), TypeVariable(R)) -> Float?): Series<Float, TypeVariable(I)> defined in com.martmists.koala.ops in file _common.kt
public inline fun <reified L : Any, reified R : Any, reified I : Any> Series<TypeVariable(L), TypeVariable(I)>.zipTransform(other: Series<TypeVariable(R), TypeVariable(I)>, transform: (TypeVariable(L), TypeVariable(R)) -> Int): Series<Int?, TypeVariable(I)> defined in com.martmists.koala.ops in file _common.kt
public inline fun <reified L, reified R, reified N, reified I : Any> Series<TypeVariable(L), TypeVariable(I)>.zipTransform(other: Series<TypeVariable(R), TypeVariable(I)>, transform: (TypeVariable(L)?, TypeVariable(R)?) -> TypeVariable(N)): Series<TypeVariable(N), TypeVariable(I)> defined in com.martmists.koala.ops in file _common.kt
It turns out it was due to the conflict between the last two; but removing the last one, the overload seems to prefer the generalized version rather than the specialized version. Is there a way to change this behavior?