Ingat transformasi passing lanjutan (transformasi CPS) yang membawa ke (di mana adalah tetap) dan ke didefinisikan oleh Sebenarnya kita memilikikelanjutan monaddengan satuan η A : A → β A yang didefinisikan oleh η A x : = λ r . r
Sekarang mari kita berpikir tentang bagaimana kita dapat mengubah peta biner , yaitu, kita ingin γ f : β A . Seseorang dengan cepat menghasilkan γ Ini masuk akal dari sudut pandang pemrograman juga.
Inilah pertanyaan saya: apakah ada alasan yang lebih dalam untuk , selain fakta bahwa itu terlihat benar dari sudut pandang pemrograman? Misalnya, apakah ada alasan kategori-teoretis atau "teoretis" lainnya untuk berpikir seperti itu masuk akal? Misalnya, bisakah kita memasak γ dari monad secara sistematis?
Saya mencari wawasan tentang transformasi CPS fungsi n -ary.
Applicative
. Memiliki liftA2
yang saya , lihat hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/...
liftA2
adalah bagian dari apa yang saya sarankan. Gagasan "idiom bracket" ( (| f x y z ... |)
diterjemahkan pure f <*> x <*> y <*> z <*> ...
dari) Applicative
sepertinya cara sistematis untuk mendapatkan bentuk n-ary dari pertanyaan Anda. Saya tahu CT, tetapi sepertinya paling sederhana untuk membicarakannya dalam istilah pemrograman standar. Jika Anda belum pernah menemukan Applicative
sebelumnya, Anda mungkin ingin melihat fungsi-fungsi monoid longgar (meskipun pernyataan Haskell tentang itu <*>
melibatkan eksponensial juga). Lagi pula, saya tidak punya jawaban untuk Anda tetapi berusaha untuk lebih memahami apa yang Anda
liftM2
atau generalisasiApplicative
? Anda dapat memperoleh versi n-ary dari apa yang Anda gambarkan (dalam bahasa yang memungkinkan Anda berbicara tentang fungsi polimorfik n-ary) langsung dari struktur aplikasi lanjutan.