Nie znam interfejsu API Flow.
Termin „podnoszenie” pochodzi od teorii kategorii. W językach programowania, takich jak Haskell lub Scala, liftfunkcja przyjmuje funkcję A => Bi w jakiś sposób wykonuje magię, dzięki czemu podniesioną funkcję F[A] => F[B]można zastosować do funktora lub monady F[A].
Konkretny przykład z wykorzystaniem Seqkontenera Scali : Załóżmy, że mamy funkcję def double(x: Int): Int = 2 * xi sekwencję val xs = Seq(1, 2, 3). Nie możemy z double(xs)powodu niezgodnych typów. Ale jeśli otrzymamy val doubleSeq = liftToSeq(double), możemy to zrobić doubleSeq(xs), co ocenia Seq(2, 4, 6). Tutaj liftToSeqmożna zaimplementować jako
def liftToSeq[A, B](f: A => B): (Seq[A] => Seq[B]) =
(seq: Seq[A]) => seq.map(f)
Seq(…)Konstruktor może być również postrzegane jako operacja podnoszenia, który podnosi wartość 1, 2, 3na Seqprzykład, co pozwala nam korzystać z list abstrakcje dla tych wartości.
Monady pozwalają nam enkapsulować wewnętrzne działania pewnego rodzaju, oferując wodoszczelny, ale łatwy do skomponowania interfejs. Zastosowanie podniesionej reprezentacji może ułatwić uzasadnienie obliczeń. Korzystanie z takich abstrakcji oznacza również, że tracimy wiedzę na temat abstrakcji, ale są one potrzebne do zapewnienia efektywnej implementacji pod maską (znalezienie odpowiedniej reprezentacji wykonania).