Richiama la trasformazione del passaggio di continuazione (trasformazione CPS) che porta da a (dove è fisso) e a definito da In effetti abbiamo la monade di continuazione con l'unità definita da e la moltiplicazione definita da β A : = R R A R f : A → B β f : β A → β B β
Ora pensiamo a come possiamo trasformare un binario mappa , vale a dire, vogliamo . Uno si presenta rapidamente con Questo ha senso anche dal punto di vista della programmazione.
Ecco la mia domanda: c'è un motivo più profondo per , oltre al fatto che sembra giusto dal punto di vista della programmazione? Ad esempio, esiste una ragione teorica di categoria o altra ragione "teorica" per pensare che abbia senso? Ad esempio, possiamo cucinare dalla monade in modo sistematico?
Sto cercando una panoramica CPS trasformate di funzioni ario.
Applicative
. Ha liftA2
qual è il mio , vedi hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…
liftA2
faceva parte di ciò che stavo suggerendo. La nozione di "parentesi idioma" (che si (| f x y z ... |)
traduce in pure f <*> x <*> y <*> z <*> ...
) Applicative
sembra il modo sistematico per ottenere la forma n-ary della tua domanda. Conosco la CT, ma mi è sembrato più semplice parlarne in termini di programmazione standard. Se non ti sei mai imbattuto in Applicative
precedenza, potresti voler esaminare i lassisti funzioni monoidali (anche se la sua affermazione di Haskell con <*>
implicazioni esponenziali). Comunque, non ho una risposta per te, ma stavo cercando di capire meglio cosa stavi ottenendo :)
liftM2
o generalizzazioni aApplicative
? Puoi derivare una versione n-ary di ciò che descrivi (in un linguaggio che ti permette di parlare delle funzioni polimorfiche di n-ary) direttamente dalla struttura applicativa di continuazione.