Я не уверен, почему вам нужно извлечь функцию таким образом.Нужный код, о котором идет речь, не компилируется, и чтобы предложить рабочую альтернативу, необходимо знать ваше реальное намерение.
Например, если вы не хотите писать длинную сигнатуру функции в типе параметра, возможно,поскольку у вас есть много таких функций, принимающих параметры такого типа, и вы боитесь ошибиться в этой сигнатуре, вы можете извлечь объявление функционального типа в псевдоним типа :
typealias Combiner<R, T> = (acc: R, nextElement: T) -> R
, а затем используйте этот псевдоним типа в объявлении функции:
fun <T, R> Collection<T>.fold(initial: R, combine: Combiner<R, T>): R {
var accumulator: R = initial
for (element: T in this) {
accumulator = combine(accumulator, element)
}
return accumulator
}