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.
Applicative. Es hat liftA2was ist mein , siehe hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…
liftA2war ein Teil dessen, was ich vorschlug. Der Begriff "Redewendung" ( (| f x y z ... |)übersetzt auf pure f <*> x <*> y <*> z <*> ...) aus Applicativescheint 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 vorgekommen Applicativewä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 :)
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.
liftM2oder 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.