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.
sumber
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.Applicative
. MemilikiliftA2
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 ... |)
diterjemahkanpure 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 menemukanApplicative
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 AndaJawaban:
sumber
Menambah jawaban Noam:
Jika kami instantiate ini ke kelanjutan monad, kami mendapatkan konstruksi Anda.
But I still don't think this really gives you the answer you're looking for...
sumber