Erinnern Sie sich an die Continuation-Passing-Transformation (CPS-Transformation), die nach (wobei festgelegt ist) und nach definiert durch In der Tat haben wir die Fortsetzung monadisch mit der Einheit definiert durch \ eta_A x \ mathrel {{:} {}} = \ lambda r. r \, x und die Multiplikation \ mu_A: \ beta (\ beta A) \ zu \ beta A definiert durch \ mu_A \, K \, r \ mathrel {{:} {=}} K (\ lambda f. f \ , r).β A : = R R A R f : A → B β f : β A → β B β
Nun lassen Sie uns darüber nachdenken , wie wir eine transformieren können binäre Karte , das heißt, wir wollen . Man findet schnell Dies ist auch aus programmtechnischer Sicht sinnvoll.
Hier ist meine Frage: Gibt es einen tieferen Grund für als die Tatsache, dass es vom Standpunkt der Programmierung aus richtig aussieht? Gibt es zum Beispiel einen kategorietheoretischen oder einen anderen "theoretischen" Grund für die Annahme, dass sinnvoll ist? Können wir zum Beispiel auf systematische Weise aus der Monade aufbereiten?
Ich suche nach einem Einblick in CPS-Transformationen von Funktionen.
quelle
liftM2
oder VerallgemeinerungenApplicative
? Sie können eine n-fache Version Ihrer Beschreibung (in einer Sprache, in der Sie über n-fache polymorphe Funktionen sprechen können) direkt aus der anwendbaren Folgestruktur ableiten.Applicative
. Es hatliftA2
was ist mein , siehe hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…liftA2
war ein Teil dessen, was ich vorschlug. Der Begriff "Redewendung" ((| f x y z ... |)
übersetzt aufpure f <*> x <*> y <*> z <*> ...
) ausApplicative
scheint der systematische Weg zu sein, um die n-äre Form Ihrer Frage zu erhalten. Ich kenne die CT, aber es schien am einfachsten, in Standard-Programmierbegriffen darüber zu sprechen. Wenn Sie vorher nicht vorgekommenApplicative
wären, könnten Sie sich nach laxen monoiden Funktoren umsehen (obwohl Haskells Aussage<*>
auch Exponentiale beinhaltet). Wie auch immer, ich habe keine Antwort für dich, aber ich habe versucht besser zu verstehen, worauf du hinaus willst :)Antworten:
Die nächstgelegene ich auf diese Frage eine Antwort gesehen habe , ist das erste Bild in der Galerie des Doktor Mellies , welche die Karte , die in jedem existiert Dialog Kategorie (dh eine monoide Kategorie mit Abschlüssen in ein festes Objekt). Beachten Sie, dass sich die CPS-Transformation von links nach rechts für allgemeine Binärfunktionen darauf reduziert, diese Map anzuwenden und dann mit der Funktionsaktion der Monade mit doppelter Negation zu komponieren.
quelle
Die Antwort von Noam erweitern:
Wenn wir dies zur Folgemonade instanziieren, erhalten wir Ihre Konstruktion.
Aber ich glaube immer noch nicht, dass dies wirklich die Antwort gibt, nach der Sie suchen ...
quelle