ฉันไม่คุ้นเคยกับ Flow API
คำว่า "การยก" มาจากทฤษฎีหมวดหมู่ ในการเขียนโปรแกรมภาษาเช่น Haskell หรือสกาล่าซึ่งเป็นliftฟังก์ชั่นใช้เวลาฟังก์ชั่นA => Bและอย่างใดดำเนินมายากลเพื่อให้ฟังก์ชั่นยกF[A] => F[B]สามารถนำไปใช้กับ functor หรือ F[A]monad
ตัวอย่างที่เป็นรูปธรรมโดยใช้ Scala ของSeqภาชนะ: สมมติเรามีฟังก์ชั่นและลำดับที่def double(x: Int): Int = 2 * x val xs = Seq(1, 2, 3)เราไม่สามารถdouble(xs)เนื่องจากประเภทที่เข้ากันไม่ได้ แต่ถ้าเราได้รับ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ตัวอย่างจึงช่วยให้เราสามารถใช้รายการนามธรรมสำหรับค่าเหล่านี้
Monads ช่วยให้เราสามารถแค็ปซูลผลงานภายในของบางประเภทโดยนำเสนออินเทอร์เฟซแบบกันน้ำ แต่สามารถปรับแต่งได้ การใช้การนำเสนอแบบยกสามารถทำให้เหตุผลเกี่ยวกับการคำนวณง่ายขึ้น การใช้ abstractions ดังกล่าวยังหมายความว่าเราสูญเสียความรู้เกี่ยวกับข้อมูลเฉพาะที่แยกออกไป แต่สิ่งเหล่านี้จำเป็นสำหรับการนำเสนอการดำเนินการที่มีประสิทธิภาพภายใต้ประทุน (การค้นหาตัวแทนการดำเนินการที่เหมาะสม)