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 liftA2
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 auf pure f <*> x <*> y <*> z <*> ...
) aus Applicative
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 vorgekommen Applicative
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 :)
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.