เรียกคืนการแปลงสภาพต่อเนื่อง (การแปลง CPS) ซึ่งใช้ถึงβ A : = R R A (โดยที่คงที่R ) และf : A → Bถึงβ f : β A → β B ที่กำหนดโดย β ในความเป็นจริงเรามีmonad ต่อเนื่องกับหน่วย η : →การบีตากำหนดโดย η x : = λ R R
ตอนนี้ให้เราคิดเกี่ยวกับวิธีการที่เราสามารถเปลี่ยนไบนารีแผนที่คือเราต้องการγ F : β → β B → β C หนึ่งเกิดขึ้นอย่างรวดเร็วด้วย γ สิ่งนี้สมเหตุสมผลจากมุมมองการเขียนโปรแกรมเช่นกัน
นี่คือคำถามของฉัน: มีเหตุผลที่ลึกกว่าสำหรับนอกเหนือจากข้อเท็จจริงที่ว่ามันดูถูกต้องจากมุมมองการเขียนโปรแกรมหรือไม่? ยกตัวอย่างเช่นมีหมวดหมู่ตามทฤษฎีหรือเหตุผล "เชิงทฤษฎี" อื่น ๆ สำหรับการคิดว่าγสมเหตุสมผลหรือไม่? ตัวอย่างเช่นเราสามารถปรุงγจาก monad อย่างเป็นระบบได้หรือไม่?
ฉันกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับการแปลง CPS ของฟังก์ชัน -ary
liftA2
เป็นส่วนหนึ่งของสิ่งที่ฉันแนะนำ แนวคิด "วงเล็บเหลี่ยม" ( (| f x y z ... |)
แปลเป็นpure f <*> x <*> y <*> z <*> ...
) Applicative
ดูเหมือนว่าเป็นวิธีที่เป็นระบบในการรับแบบฟอร์มคำถามของคุณ ฉันรู้ CT แต่ดูเหมือนง่ายที่สุดที่จะพูดถึงมันในแง่การเขียนโปรแกรมมาตรฐาน หากคุณไม่เคยเจอมาApplicative
ก่อนคุณอาจต้องการดู lone monoidal functors (แม้ว่าคำสั่งของ Haskell เกี่ยวกับมันจะ<*>
เกี่ยวข้องกับ exponentials เช่นกัน) อย่างไรก็ตามผมไม่ได้มีคำตอบสำหรับคุณ แต่ก็พยายามที่จะเข้าใจสิ่งที่คุณได้รับที่ :)
liftM2
หรือการสรุปทั่วไปApplicative
ใช่หรือไม่ คุณสามารถรับ n-ary เวอร์ชั่นของสิ่งที่คุณอธิบาย (ในภาษาที่ให้คุณพูดถึงฟังก์ชั่น polymorphic n-ary) โดยตรงจากโครงสร้างการประยุกต์ต่อเนื่อง