This might be a bit noobish of me however I'm somewhat new to Kotlin.
Why can I curry a lambda (or anonymous function) but not a named function? eg:
fun add(a: Int, b: Int): Int = a + b
val multiply: (Int, Int) -> Int = { a: Int, b: Int -> a * b }
val add3 = add.curried()(3) // does not compile
val multiply2 = multiply.curried()(2)
Where this affects me is that I want to have a function that can take different parameter types eg: an Int or a String. Standard function overloading gets me out of this
fun add(a: Int, b: Int): Int = a + b
fun add(a: String, b: String): Int = add(Integer.parseInt(a), Integer.parseInt(b))
However I lose the nice FP'ness ie: currying, composability, etc.