No estoy familiarizado con la API de Flow.
El término "levantamiento" proviene de la teoría de categorías. En lenguajes de programación como Haskell o Scala, una liftfunción toma una función A => By de alguna manera realiza magia para que la función elevada F[A] => F[B]pueda aplicarse a un functor o mónada F[A].
Un ejemplo concreto con el Seqcontenedor de Scala : supongamos que tenemos una función def double(x: Int): Int = 2 * xy una secuencia val xs = Seq(1, 2, 3). No podemos double(xs)debido a tipos incompatibles. Pero si obtenemos a val doubleSeq = liftToSeq(double), podemos hacer doubleSeq(xs), lo que se evalúa como Seq(2, 4, 6). Aquí, liftToSeqse puede implementar como
def liftToSeq[A, B](f: A => B): (Seq[A] => Seq[B]) =
(seq: Seq[A]) => seq.map(f)
El Seq(…)constructor también puede verse como una operación de elevación, que eleva los valores 1, 2, 3a una Seqinstancia, lo que nos permite usar abstracciones de lista para estos valores.
Las mónadas nos permiten encapsular el funcionamiento interno de algún tipo al ofrecer una interfaz hermética pero componible. El uso de una representación elevada puede facilitar el razonamiento sobre un cálculo. El uso de tales abstracciones también significa que perdemos el conocimiento de los detalles abstractos, pero son necesarios para proporcionar una implementación eficiente bajo el capó (encontrar una representación de ejecución adecuada).