Rappelons la transformation de passage de continuation (transformée CPS) qui prend à β A : = R R A (où R est fixe) et f : A → B à β f : β A → β B défini par β En fait, nous avons lamonade de continuationavec l'unité η A : A → β A définie par η A x : = λ r . r
Maintenant , nous allons réfléchir à la façon dont nous pouvons transformer un binaire carte , par exemple, nous voulons γ f : β A → β B → β C . On arrive rapidement avec γ Cela est également logique du point de vue de la programmation.
Voici ma question: y a-t-il une raison plus profonde pour , autre que le fait qu'il semble juste du point de vue de la programmation? Par exemple, y a-t-il une raison théorique ou autre «théorique» pour penser que γ a un sens? Par exemple, pouvons-nous faire cuire γ de la monade de manière systématique?
Je cherche un aperçu des transformations CPS des fonctions -ary.
Applicative
. Il a liftA2
qui est mon , voir hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…
liftA2
faisait partie de ce que je proposais. La notion de "parenthèse idiomatique" (se (| f x y z ... |)
traduit par pure f <*> x <*> y <*> z <*> ...
) de Applicative
semble être le moyen systématique d'obtenir la forme n-aire de votre question. Je connais le CT, mais il m'a semblé plus simple d'en parler en termes de programmation standard. Si vous ne l'aviez pas rencontré Applicative
auparavant, vous voudrez peut-être examiner les foncteurs monoïdes laxistes (bien que la déclaration de Haskell à ce sujet <*>
implique également des exponentielles). Quoi qu'il en soit, je n'ai pas de réponse pour vous mais j'essayais de mieux comprendre où vous vouliez en venir :)
liftM2
ou des généralisationsApplicative
? Vous pouvez dériver une version n-aire de ce que vous décrivez (dans un langage qui vous permet de parler des fonctions polymorphes n-aire) directement à partir de la structure applicative de continuation.