Flow API'sine aşina değilim.
“Kaldırma” terimi kategori teorisinden gelir. Haskell veya Scala gibi programlama dillerinde, bir lift
işlev bir işlevi alır A => B
ve kaldırılan işlevin F[A] => F[B]
bir functor'a veya monad'a uygulanabilmesi için bir şekilde sihir yapar F[A]
.
Scala'nın Seq
kabını kullanan somut bir örnek : Bir fonksiyonumuz def double(x: Int): Int = 2 * x
ve bir dizimiz olduğunu varsayın val xs = Seq(1, 2, 3)
. double(xs)
Uyumsuz tipler nedeniyle yapamayız . Ama bir elde val doubleSeq = liftToSeq(double)
edersek, yapabiliriz doubleSeq(xs)
, ki bunu değerlendirir Seq(2, 4, 6)
. Burada, liftToSeq
olarak uygulanabilir
def liftToSeq[A, B](f: A => B): (Seq[A] => Seq[B]) =
(seq: Seq[A]) => seq.map(f)
Seq(…)
Yapıcı da değerlerini kaldırır bir kaldırma operasyonu, olarak görülebilir 1, 2, 3
bir içine Seq
böylece bize bu değerler için liste soyut kullanmak için izin Örneğin.
Monadlar, su geçirmez, ancak birleştirilebilir bir arayüz sunarak bir tür iç işi kapsüle etmemizi sağlar. Kaldırılmış bir gösterim kullanmak bir hesaplama hakkında akıl yürütmeyi kolaylaştırabilir. Bu tür soyutlamaların kullanılması, aynı zamanda soyutlanmış özellikler hakkında bilgimizi kaybettiğimiz anlamına gelir, ancak başlık altında etkili bir uygulama sağlamak için bunlara ihtiyaç vardır (uygun bir yürütme temsili bulmak).