Я перевожу некоторый код Scala на Kotlin. Это основано на коде в книге Функциональное программирование в Scala . Вот прямой перевод кода на Kotlin:
data class State<S, out A>(val run: (S) -> Pair<A, S>) {
fun <B> flatMap(f: (A) -> State<S, B>): State<S, B> = State { s ->
val (a, s1) = run(s)
f(a).run(s1)
}
fun <B> map(f: (A) -> B): State<S, B> =
flatMap { a -> unit(f(a)) }
companion object {
fun <S, A> unit(a: A): State<S, A> =
State { s -> a to s }
}
}
Вызов юнита (f (a)) в карте вызывает следующую ошибку:
Error:(8, 28) Kotlin: Type inference failed: Not enough information to infer parameter S in
fun <S, A> unit(a: A): State<S, A>
Please specify it explicitly.
Поскольку все типы являются универсальными, и он знает, что это универсальный тип S, я понятия не имею, какой тип указать. Что не так с этим кодом?
Заранее спасибо.