ArrowKT - Объектив вызывает вызов ошибки компиляции - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь следовать этой документации о Lens в Стрелке. Однако, когда я пытаюсь написать Lens

data class Player(val health: Int)

val playerLens: Lens<Player, Int> = Lens(
    get = { player -> player.health },
    set = { player, value -> player.copy(health = value) }
)

, я получаю следующую ошибку:

4 type arguments expected for operator fun <S, T, A, B> invoke(): PLens<S, T, A, B>

Я вижу, что Lens<S, T> является typealias для PLens<S, S, T, T>, так почему эта компиляцияошибка?

Kotlin версия 1.3.50

Arrow Optics версия 0.10.0

1 Ответ

1 голос
/ 07 октября 2019

Kotlin typealias здесь не работает должным образом. При вызове конструктора вам необходимо указать здесь 4 параметра:

Lens<Player, Player, String, String>(
        get = { v -> v.health },
        set = { v, value -> player.copy(health = value)  }
    )

Наши вообще не указывают их, компилятор может вывести их для вас из типов параметров лямбды

Lens(
        get = { player: Player -> player.health },
        set = { player: Player, value: Int -> player.copy(health = value) }
    )
...