Я изучаю функциональное программирование в Kotlin, используя библиотеку стрелок, и я сталкиваюсь со странным поведением функции сгиба любого типа (по крайней мере, для меня).
import arrow.core.*
import arrow.syntax.function.pipe
object UserService {
fun findAge(user: String): Either<String, Option<Int>> {
return Either.Right(Some(1))
}
}
fun main(args: Array<String>) {
val anakinAge: Either<String, Option<Int>> = UserService.findAge("Anakin")
anakinAge.fold({itLeft -> itLeft.toUpperCase()},{itRight -> itRight.fold({ 1 }, {it})}) pipe ::println
}
согласно сгибанию стрелки Синтаксис функции:
inline fun <C> fold(ifLeft: (A) -> C, ifRight: (B) -> C): C
, если значение Left, оно выполняет ifLeft функция и возвращает тип C, если оно верно, оно выполняется ifRight и возвращает значение с тем же типом C, но в приведенном выше фрагменте кода я возвращаю String, если значение Left, и Int, если значение Right. Как он принимает этот синтаксис?