Я не знайомий з API API.
Термін "підняття" походить від теорії категорій. У мовах програмування, таких як Haskell або Scala, liftфункція приймає функцію A => Bі якось виконує магію, щоб підняту функцію F[A] => F[B]можна застосувати до функтора або монади F[A].
Конкретний приклад використання Seqконтейнера Scala : Припустимо, у нас є функція def double(x: Int): Int = 2 * xта послідовність val xs = Seq(1, 2, 3). Ми не можемо double(xs)через несумісні типи. Але якщо ми отримаємо a val doubleSeq = liftToSeq(double), ми можемо зробити це doubleSeq(xs), що оцінює Seq(2, 4, 6). Тут liftToSeqможна реалізувати як
def liftToSeq[A, B](f: A => B): (Seq[A] => Seq[B]) =
(seq: Seq[A]) => seq.map(f)
Seq(…)Конструктор також можна розглядати як операції підйому, який піднімає значення 1, 2, 3в Seqразі, що дозволяє нам використовувати список абстракцій для цих значень.
Монади дозволяють нам інкапсулювати внутрішні роботи якогось типу, пропонуючи водонепроникний, але сумісний інтерфейс. Використання піднятого представлення може полегшити міркування про обчислення. Використання таких абстракцій також означає, що ми втрачаємо знання про вилучені специфіки, але вони потрібні для забезпечення ефективної реалізації під кришкою (пошуку відповідного представлення виконання).